通过 ajax 使用实体数据库填充下拉列表

Posted

技术标签:

【中文标题】通过 ajax 使用实体数据库填充下拉列表【英文标题】:Populate a dropdown with entity database via ajax 【发布时间】:2021-09-08 22:14:05 【问题描述】:

正如标题所说,我正在尝试使用 ajax 从我的 ApiController 填充下拉列表,但我有点迷路了。我基本上有一个带回一堆部门名称的实体表。调试后,我知道我的表正在带回数据,因为它显示了部门名称。所以我认为问题主要在于ajax。当我查看该页面时,下拉列表只显示“未选择任何内容”并且有一个空列表。在我的 ApiController 中,我有:

    [RoutePrefix("Api/Request")]
    public class NewUserController : ApiController
    
        private readonly ZeusEntities _zeus_Entity;

        public NewUserController(ZeusEntities zeus)
        
            _zeus_Entity = zeus;
        

        [Route("Departments")]
        [HttpGet]
        [CustomApiAuthorize(Roles = UserRole.HR)]
        public async Task<IHttpActionResult> GetDepartments()
        
            var departments = await _zeus_Entity.DEPARTMENT.Where(z => z.B_DELETE == 0).Select(z => z.S_NAME).Distinct().ToListAsync();

            return Ok(departments);
        
     

在我看来,我有:

<div class="form-group col-xs-12 col-sm-4">
     <div class="input-group ">
          <span class="input-group-addon white">Department</span>
          <select class="form-control gray" id="departmentSelect" type="text" </select>
     </div>
</div>

内联:

$.ajax(
    type: "GET",
    url: "@Url.Action("Departments", "Api/Request")",
    data: "",
    success: function (data) 
        var s = '<option value="-1">Please Select a Department</option>';
        for (var i = 0; i < data.length; i++) 
            s += '<option value="' + data[i].I_PATTERNID + '">' + data[i].S_NAME + '</option>';
        
        $("#departmentSelect").html(s);
    
);

你能指出我正确的方向吗? 谢谢

【问题讨论】:

打印看看data有什么。另外,您是否返回 json 响应?如果是,您需要在访问之前对其进行解析。 @Swati 最好返回一个 json 响应吗?运行后,我可以检查 chrome 开发工具并查看 GetDepartments 正在获取正确的数据,但是该列表仅显示“未定义”作为所有选项。 解析您的 json 即:JSON.parse(data) 然后访问该值,看看是否有效。 【参考方案1】:

所以我将函数的 ajax 更改为 $.each 并意识到我调用的是表列名而不是分配给数据的变量名。

$.each(deptList, function (key, department) 
       departmentsHtml += "<option value='" + department.DeptId + "'>" + department.Department + "</option>"
 );

我觉得我忽略了那一点很傻。尽管如此,这解决了我的问题。

【讨论】:

以上是关于通过 ajax 使用实体数据库填充下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

如何根据使用 jQuery/AJAX 和 PHP/MySQL 选择的第一个下拉列表填充第二个下拉列表?

从使用 AJAX 填充的下拉列表中获取值

如何使用 JSON 数据填充下拉列表作为 jQuery 中的 ajax 响应

在 laravel 中使用 ajax 用数据库填充下拉列表

填充下拉列表 - PHP Ajax MySQL

Select2 - Ajax 数据 - 根据查询填充下拉列表