我想传递一个序列化的json对象并在自定义Html Helper的结果中返回它。像这样的东西
public static HtmlString SomeHelper(this HTMLHelper htmlHelper)
{
var MyObject = new Foo();
var oSerializer = new JavaScriptSerializer();
var str = string.Format(@"<a href""#""
onclick=""var myObject = $.parseJSON(0);
alert('my object name property '+ myObject.Name); ""> Click me</a>",
oSerializer.Serialize(MyObject));
return new HtmlString(str);
}
理论上这个东西应该有效,但事实并非如此。它将序列化字符串放到标记中,然后由于双引号和单引号,所有内容都变得混乱。我尝试在序列化后应用HtmlString,我甚至尝试使用HTmlString.ToHtmlString()。什么都行不通。
事实上,我可能不应该这样做。应该不显眼地使用click事件调用。我知道。然后我仍然需要在生成的标记中的某处保存json对象。
更新:我甚至试图这样做:
sJson.replace("\"",""")
没有帮助。浏览器会自动将"
转换为"
。我不知道如何保留标记
答案 0 :(得分:0)
html.Encode是答案吗?
return new HtmlString(Html.Encode(str));
答案 1 :(得分:0)
我想唯一的解决方案是将oSerializer.Serialize(MyObject)中的所有双引号替换为其他符号,这在html标记中不会发生冲突,然后在解析之前将双引号放回,否则就不会不是一个合法的json字符串。