点击锚标签后,我的控制器的动作就会被击中。在查询字符串中传递了一个参数。我正在使用下面的代码将List转换为序列化的json sting。
public ActionResult EmployeeVote(string regionID)
{
var nomineeList = NomineeModel.GetNomineeByRegionID(Convert.ToInt16(regionID));
ViewBag.NomineeList = JsonConvert.SerializeObject(nomineeList,Formatting.None);
return View(ViewBag);
}
这是json字符串我认为字符串的制作方式存在一些问题。
[{"Id":0,"EmpId":1,"FirstName":"First Last","Email":"mail@xyz.com","Description":null,"RegionID":0}]
在客户端。 但是模型列表在反序列化时会出错。
$(function () {
var modelList = JSON.parse('@ViewBag.NomineeList');
$(modelList).each((function () { //some logic});
});
我想执行每个循环来迭代模型列表以创建一些动态元素。任何帮助?
答案 0 :(得分:4)
问题是@ViewBag.NomineeList
将对json字符串进行HTML编码。你需要阻止这种情况,但仍然要确保字符串是一个有效的javascript字符串。
在控制器中:
ViewBag.NomineeList = new JavaScriptSerializer().Serialize(
JsonConvert.SerializeObject(nomineeList, Formatting.None)
);
JavaScriptSerializer
确保保存字符串以在JS中使用,因此新行被编码等。
然后,在视图中:
var modelList = JSON.parse(@Html.Raw(ViewBag.NomineeList));
Html.Raw
阻止HTML编码JavaScriptSerializer
更新:我添加了一个示例,说明如何在不使用JavaScriptSerializer
的情况下使其工作。但我重新考虑了潜在的危险,并将其删除了。使用JavaScriptSerializer
坚持上述方法,它更安全。
答案 1 :(得分:0)
这是一个临时解决方案:
替换“”“
ViewBag.NomineeList = JsonConvert.SerializeObject(nomineeList,Formatting.None).Remove(" "");
也可以尝试使用http://json.codeplex.com/。