我需要将模型对象列表转换为JSON列表。
<a data-model="@Model.Schools"></a>");
当按下上述按钮时,学校列表将解析为一个jQuery事件处理程序(我在这里遗漏了一些代码)
在这里,我自然希望将学校列表读为json列表。
var items = JSON.stringify(button.data('model'))
var items2 = JSON.parse('"' + button.data('model') + '"')
我尝试了上面的方法,但是没有运气,它仍然因为尝试转换System.Collections.Generic.List`1而大吼大叫。
我也尝试在按钮上将对象序列化为JSON,即,@HTML.raw(Json.Serialize(Model.Schools)
但这只是在jQuery中给了我一个空对象...
因此,如何在jQuery中将Model对象转换为json对象?
如果我正确地收到了您的问题说明,看来您已经很多了。
您需要将列表序列化为Razor属性(不要使用@Html.Raw
helper,因为它不会转义您的字符串并弄乱您的页面):
<a id="btnModel" data-model="@Json.Encode(Model.Schools)" onclick="process()">TEST</a>
<!-- assuming you have Newtonsoft.Json package installed, the following line should also work-->
<a id="btnModel" data-model="@Newtonsoft.Json.JsonConvert.SerializeObject(Model.Schools)" onclick="process()">TEST</a>
然后在您的Javascript中:
function process() {
var m = $('#btnModel').data('model');
alert(JSON.stringify(m));
}
查看这个dotnet提琴作为工作示例
显然,内置的serilizer会以某种方式乱码格式,因此需要正确的html编码。不幸的是,这意味着您必须使用Javascript对其进行解码。避免这种麻烦的一种方法是将json字符串输出到javasctipt块中(请参见第二个示例)
<a id="btnModel" data-model="@Html.Encode(Json.Serialize(Model.Schools))" onclick="process()">Method 1 - Lotsa pain</a>
<a id="btnModel1" onclick="process1()">Method 2 - Less back and forth</a>
function decodeHtml(html) {
var txt = document.createElement("textarea");
txt.innerHTML = html;
return txt.value;
}
function process() {
var a = $('#btnModel').data('model');
a = JSON.parse(decodeHtml(a));
alert(JSON.stringify(a));
}
function process1() {
var a = @Json.Serialize(Model.Schools);
alert(JSON.stringify(a));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句