使用ajax和控制器操作不会填充下拉列表

时间:2015-08-12 16:11:44

标签: javascript jquery ajax asp.net-mvc entity-framework

我之前提出的一个问题也是如此。上一个问题中的问题是我试图使用html帮助程序调用控制器操作,但它是在外部.js文件中。

我现在将.ajax调用移动到视图中的脚本标记,但下拉列表仍未填充。当我在浏览器中查看网络选项卡时,我收到了500错误请求。

Ajax电话:

<script>
$(document).ready(function() {

    $.ajax({
        url: '@Url.Action("GetBranch", "Report")',
        type: "GET",
        success: $.each(function(result) {
            $("#dropdown2").append('<option value=' + result.BranchId + '>' + result.BranchName + '</option>');
        })
    });
});
</script>

控制器操作:

public JsonResult GetBranch()
    {
        using (var entities = new TestEntities())
        {
            var branches = entities.Branches;

            return Json(branches.Select(t => new { Text = t.BranchName, Value = t.BranchId }), JsonRequestBehavior.AllowGet);
        }
    }

此外,我不确定我是否正确使用$.each。大约有100个分支机构。我无法使用@DropDownListFor,因为我必须使用已存在的<select>。我正确使用JsonResult吗?

2 个答案:

答案 0 :(得分:1)

这里发生的事情很少。总的来说,你接近这一点是正确的。一旦完成预测,.Select将返回IEnumerable。因此,投影对象集尚未枚举,仍然是附加到数据上下文的动态代理。

当进行序列化调用时,它会尝试序列化一个尚未枚举的对象,这是发生服务器错误的位置。请务必在那里调用.ToList()来枚举可枚举的内容。

return Json(branches.Select(t => new { 
    Text = t.BranchName, 
    Value = t.BranchName //should this be t.BranchId ?
}).ToList(), JsonRequestBehavior.AllowGet);
///^^^^^^^^

另外,回到客户端,你怀疑jQuery是不正确的。每个都需要在success函数回调中调用,将成功结果传递给每个函数并使用this引用每个返回的记录。

由于您的Select语句将BranchName投影到Text和BranchName为Value(... wait,是否应将BranchId转换为Value?),请确保您还引用了jquery回调中的那些内容。

success: function(result) {
 //if there are so many results, it may be best to cache your selector
 var dropdown2 = $("#dropdown2");
 $.each(result, function(){ 
  dropdown2.append('<option value=' + this.Value + '>' + this.Text + '</option>');
 });
}

答案 1 :(得分:0)

您必须将function而不是$.each传递给success并且$.each也是错误的,请找到以下代码:

$.ajax({
    url: '@Url.Action("GetBranch", "Report")',
    type: "GET",
    success: function (data) {
      $.each(data, function(index, result) {
        $("#dropdown2").append('<option value=' + result.BranchId + '>' + result.BranchName + '</option>');
    })
    }

});

检查一些jQuery ajax examples