我想将一个复杂的对象从Controller Method传递回我的Ajax调用。据我所知,从几项研究中可以看出JSON是最佳选择。
这是我的控制器方法:
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);
}
});
回到我的脚本中,似乎属性&#34;复杂&#34;和&#34; HTML&#34;无法访问 - 我做错了什么?这是传递复杂对象的最佳方法还是有其他方法可以做到这一点?
答案 0 :(得分:3)
由于您将返回类型指定为HTML(dataType: 'html'
),因此jQuery将响应视为字符串(而不是JSON),因此data.Complex
不会评估任何内容。如果您尝试将数据解析为JSON,则可能会出错,因为HTML和JSON不能很好地协同工作。我建议先返回JSON,然后再调用HTML,或者只是在服务器上选择正确的模板,只发送HTML。
编辑:@Savaratkar是正确的,您还可以编码/转义HTML并通过JSON传递它。