无法绑定MVC4 Jquery中的下拉列表

时间:2016-10-17 05:30:39

标签: jquery asp.net-mvc asp.net-mvc-4

我使用jquery MVC4绑定下拉列表。在控制器中我获得了所有必需的值但是当我在jquery成功调用中设置警报时,它显示为空。它显示[对象,对象]。这是我到目前为止所尝试的。

$.ajax({
    url: "@Url.Action("getrejectReason", "DocumentVerification")",
    dataType: "json",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    error: function () {
        alert(" An error occurred.");
    },
    success: function (result) {
        alert(result);
        $.each(result, function (index, item) {
            options.append($("<option/>").val(item.value).text(item.text));
        });
    }
});

<select id="options"></select>

这是服务器端代码。

[HttpPost]
public JsonResult getrejectReason()
{
    DB_KYC3Entities db = new DB_KYC3Entities();
    var result = new SelectList(db.dbo_tm_rejectcomment, "Id", "RejectComment");
    return Json(result, JsonRequestBehavior.AllowGet);
}

有人可以告诉我这里我做错了什么吗?感谢

1 个答案:

答案 0 :(得分:0)

您的控制器方法正在传回序列化的SelectList,其中包含属性ValueText(大写),因此要添加引用相同属性所需的选项(大写)

options.append($("<option/>").val(item.Value).text(item.Text));

但是您的代码还存在其他一些问题。

  1. 您未在请求中发送任何数据,因此不需要contentType: "application/json; charset=utf-8",
  2. 您的方法已标记为[HttpPost],因此请使用 {/ 1}}是不必要的
  3. 您应该只发回视图使用的数据(没有意义 将JsonRequestBehavior.AllowGet的其他属性发回给。{ 客户端,所以方法中的代码应该生成一个集合 匿名对象

    SelectListItem
  4. 但是你的ajax调用是不必要的,你有效地告诉客户端 - 这里是视图,但是我忘了发送所有数据,所以再等一会儿再做一次请求来获取它。您应该使用

    生成视图
    var model = db.dbo_tm_rejectcomment
        .Select(x => new { Value = x.Id, Text = x.RejectComment });
    return Json(model);
    

    其中@Html.DropDownListFor(m => m.SelectedRejectReason, Model.RejectReasonList) 是视图模型中RejectReasonList

    的属性

    作为旁注,请勿使用IEnumerable<SelectListItem>进行调试。在脚本中添加alert()(或设置断点),以便您可以单步执行脚本并检查变量。如果您确实要打印输出,请使用debugger;,这样可以扩展输出并查看数组中的实际对象。