我使用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);
}
有人可以告诉我这里我做错了什么吗?感谢
答案 0 :(得分:0)
您的控制器方法正在传回序列化的SelectList
,其中包含属性Value
和Text
(大写),因此要添加引用相同属性所需的选项(大写)
options.append($("<option/>").val(item.Value).text(item.Text));
但是您的代码还存在其他一些问题。
contentType:
"application/json; charset=utf-8",
[HttpPost]
,因此请使用
{/ 1}}是不必要的您应该只发回视图使用的数据(没有意义
将JsonRequestBehavior.AllowGet
的其他属性发回给。{
客户端,所以方法中的代码应该生成一个集合
匿名对象
SelectListItem
但是你的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;
,这样可以扩展输出并查看数组中的实际对象。