如何将json字符串传递给HtmlHelper的结果?

时间:2011-05-11 18:20:26

标签: json asp.net-mvc-3 javascriptserializer

我想传递一个序列化的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("\"","&quot;")

没有帮助。浏览器会自动将&quot;转换为"。我不知道如何保留标记

2 个答案:

答案 0 :(得分:0)

html.Encode是答案吗?

return new HtmlString(Html.Encode(str)); 

答案 1 :(得分:0)

我想唯一的解决方案是将oSerializer.Serialize(MyObject)中的所有双引号替换为其他符号,这在html标记中不会发生冲突,然后在解析之前将双引号放回,否则就不会不是一个合法的json字符串。