我的控制器,将json对象发送到View。
public ActionResult GetFormsByCategory(string ParentFormCategoryID)
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
List<Forms> FormsList=null;
try
{
FormsList = some data;
}
catch (Exception ep)
{
//error log
}
return Json(javaScriptSerializer.Serialize(FormsList),JsonRequestBehavior.AllowGet);
}
和我的ajax调用,它的成功,但是在json对象上操作它显示b是未定义的。
$.ajax({
url: '.url', //Target URL for JSON file
contentType: 'application/json; charset=utf-8',
type: 'POST',
dataType: 'json',
async: false,
success: function (data) {
var rs = JSON.parse(data);
var FormList = "<ul style='list-style:none;display:block;' class='sub-list-forms'>";
$.each((rs), function (FormID, ViewName) {
//alert(ViewName);
FormList += "<li id='" + FormID + "'>" + ViewName + "</li><li>Reports</li>";
});
FormList += "</ul>";
$(this).append(FormList);
},
error: function (xhr, status) {
console.log(status);
}
});
我尝试了很多选择,但都是徒劳的..
任何帮助......?
答案 0 :(得分:0)
您不必使用JavaScriptSerializer
,因为当您使用return Json(FormsList,JsonRequestBehavior.AllowGet);
时,它会自动序列化您的列表。但您的主要问题是,当您使用dataType: 'json'
时,响应会自动转换为JSON,因此您不必使用var rs = JSON.parse(data);
如果我总结一下:
控制器:
public ActionResult GetFormsByCategory(string ParentFormCategoryID)
{
List<Forms> FormsList=null;
try
{
FormsList = some data;
}
catch (Exception ep)
{
//error log
}
return Json(FormsList,JsonRequestBehavior.AllowGet);
}
的Ajax:
$.ajax({
url: '.url', //Target URL for JSON file
contentType: 'application/json; charset=utf-8',
type: 'POST',
dataType: 'json',
async: false,
success: function (data) {
var FormList = "<ul style='list-style:none;display:block;' class='sub-list-forms'>";
$.each((data), function (FormID, ViewName) {
//alert(ViewName);
FormList += "<li id='" + FormID + "'>" + ViewName + "</li><li>Reports</li>";
});
FormList += "</ul>";
$(this).append(FormList);
},
error: function (xhr, status) {
console.log(status);
}
});
FormsList
初始化为null可能会导致一些问题,以防您在控制器中出现异常 - 您将序列化null
并根据JQuery ajax帮助页面:以严格的方式解析JSON数据;任何格式错误的JSON都是 拒绝并抛出一个解析错误。截至jQuery 1.9,一个空的 回应也被拒绝;服务器应返回null响应 或{}代替。
因此,在这种情况下,您最好返回null而不是
return Json(FormsList,JsonRequestBehavior.AllowGet);