我想将一个复杂的对象从 Controller 方法传递回我的 Ajax 调用。据我从多项研究中了解到,JSON 是目前的选择。
这是我的 Controller 方法:
public JsonResult GetUserByData(string fn, string ln, string dep, string cc, string tel, string mail) {
IList<Models.Person> userCollection = Models.Person.GetPersonsByData(fn, ln, dep, tel, cc, mail).ToList();
if (userCollection.Count > 1) {
return Json(new { Complex= true, HTML = PartialView("SomeView.cshtml", userCollection) });
}
else {
return Json(new { Complex = false, HTML = PartialView("SomeOtherView.cshtml", userCollection.First()) });
}
这是我的 Ajax 调用:
$.ajax({
url: 'Home/GetUserByData',
type: 'POST',
dataType: 'html',
data: {
fn: firstname,
ln: lastname,
dep: department,
cc: costcenter,
tel: telephone,
mail: mail
},
success: function (data) {
if (data.Complex)
$('#Customer_Person').html(data.HTML);
else
$('#Notification_Area').html(data.HTML);
}
});
回到我的脚本,似乎无法访问属性“Complex”和“HTML” - 我做错了什么?这是传递复杂对象的最佳方法还是有其他方法可以做到这一点?
最佳答案
由于您将返回类型指定为 HTML (dataType: 'html'
),jQuery 会将响应视为字符串(而不是 JSON),因此 data.Complex
code> 不会评估任何内容。如果您尝试将数据解析为 JSON,则可能会出错,因为 HTML 和 JSON 不能很好地协同工作。我建议首先返回 JSON,然后对 HTML 进行后续调用,或者仅在服务器上选择正确的模板并仅发送 HTML。
编辑: @Savaratkar 是正确的,您还可以对 HTML 进行编码/转义并通过 JSON 传递。
关于javascript - 在 Ajax 成功处理程序中处理 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30317049/