根据 ASP.net 中的模型值动态编辑 SQL 查询

Posted

技术标签:

【中文标题】根据 ASP.net 中的模型值动态编辑 SQL 查询【英文标题】:Dynamically edit SQL Query based off of model value in ASP.net 【发布时间】:2021-09-30 20:03:57 【问题描述】:

我正在使用 ASP.net 和 SQL 查询。在 SQL 中,我有类似于这些的表,名为 Departments 和 SubDepartments

DepartmentID DepartmentName
1 Department1
2 Department2
SubDepartmentID SubDepartmentName DepartmentID
1 SubDepartment1 2
2 SubDepartment2 2
3 SubDepartment3 1

在 asp.net 中,我需要运行类似于此的查询

SELECT SubDepartmentID FROM SubDepartments WHERE DepartmentID = '2'

这会给我结果

SubDepartmentID
1
2

但是,我需要像这样动态地执行此操作

SELECT SubDepartmentID FROM SubDepartments WHERE DepartmentID = '*Dynamic Value*'

在我看来,动态值是根据模型的下拉值给出的。

我尝试过在 asp.net 中查看动态编辑 SQL 查询的不同方法,但似乎没有什么对我有用。

我的目标最终是有一个部门ddl,子部门ddl,机器ddl,设备ddl,然后是问题ddl。我最终需要一个查询来读取所有这些值并仅返回属于所选部门、子部门、机器和设备的问题。只是完成部门和子部门之间的连接应该足以弄清楚如何做到这一点。

编辑: 到目前为止我的视图代码是这样的

<script src="~/Scripts/jquery/jquery-3.3.1.min.js"></script>
<script src="~/Scripts/jquery/bootstrap.min.js"></script>
<script type="text/jscript">
    $(function () 
    $("#Departmentddl").change(function () 
    alert($('option:selected').val());
    );
    );
</script>
<div class="form-group" id="Departmentddl">
    <label asp-for="DepartmentId" class="control-label"></label>
    <select asp-for="DepartmentId" class="form-control" asp-items="ViewBag.DepartmentId"></select>

</div>
<div class="container" id="SubDepartmentddlOther">
    <div class="form-group" id="SubDepartmentddl">
        <label asp-for="SubDepartmentId" class="control-label"></label>
        <select asp-for="SubDepartmentId" class="form-control" asp-items="ViewBag.SubDepartment"></select>
    </div>
</div>

注意:ViewBag.Department 有效,但 ViewBag.SubDepartment 没有值。

我还应该补充一点,我的控制器名为“RecordEntriesController”

再次编辑:

我现在正在使用它来尝试填写下拉列表。它正在工作,但没有使用我的变量 NumberValue 和 NameLabel。我如何使这些正确?这是我的 JSON,下面是 jscript。我在控制器中创建了 JSON,因此如果格式不正确,可以对其进行更改。

"NumberValue":"5","NameLabel":"SubDepartment1","NumberValue":"8","NameLabel":"SubDepartment2"
<script type="text/jscript">
    $(function () 
        $("#ddlDepartments").change(function () 
            var selectedid = $('option:selected').val();
            if (selectedid > 0) 
                $.ajax(
                    url: "/RecordEntries/PopulateddlSubDepartments",
                    data: 
                        id: selectedid
                    ,
                    type: "Post",
                    dataType: "json",
                    success: function (data) 
                        alert(data);
                        var ddldist = $('#ddlSubDepartments');
                            $.each(data, function (NumberValue, NameLabel) 

                                 ddldist.append(
                                     $('<option></option>').val(NumberValue).html(NameLabel)
                            );
                        );

                    ,
                );
            
        );
    );
</script>

【问题讨论】:

您使用什么技术与数据库通信?是asp mvc吗? @MeysamaAsadi 是的,我正在使用 MVC 你的问题不清楚,是用entityframework还是ado? 实体框架。抱歉,这是我的第一个项目,我什至不知道其中的一些含义。我正在使用 MVC 控制器和使用实体框架的视图。如果有区别的话,它也是 asp.net Core。 你先做代码还是先做模型? 【参考方案1】:

把脚本改成这个:

url:"/Home/GetDropDownList" 替换为您的控制器和操作的名称

<script type="text/jscript">
  $(function() 
    $("#Departmentddl").change(function() 
      var selectedid = $('option:selected').val();
      if (selectedid > 0) 
        $.ajax(
          url: "/Home/GetDropDownList",
          data: 
            id: selectedid
          ,
          type: "Post",
          dataType: "Json",
          success: function(result) 
             alert(result);
          ,
          error: function() 
           
          
        );
       
    );
  );
</script>

在你的控制器中

[HttpPost]
public IActionResult GetDropDownList(int id)

   // do work
   return Json("success", JsonRequestBehavior.AllowGet);  

【讨论】:

无法识别 JsonRequestBehavior。我尝试添加using System.Web.Mvc,但这会给我的控制器的其余部分添加很多错误。还有其他方法可以添加参考吗?我不能为System.Web.Mvc使用正确的框架@ 使用 return Ok("success") 或使用 return new JsonResult("success"); 我知道我真的不擅长这个哈哈。无论如何,我一直在努力实现这一点,只是一直卡住。我曾尝试使用原始 sql,但后来遇到了将其转换为 JSON 的问题。我想我可能实际上不必使用 JSON 将数据传回视图。我可以只使用 ViewData 或 ViewBag,只要我可以在其中使用 where 子句,我还没有弄清楚。

以上是关于根据 ASP.net 中的模型值动态编辑 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

用于从 ASP .NET 更新表的动态 SQL

如何根据 asp.net mvc4 中的模型列表填充 ListBox?

ASP.NET GridView代码实现编辑,删除功能

如何从剃刀视图提交具有动态列表的模型中的列表? ASP.NET 核心 3.1

ASP.NET SQL 等于输入文本框

定义脚手架。 (关于动态数据和 ASP.NET MVC)