Как я могу передать строку json в результат HtmlHelper?

#json #asp.net-mvc-3 #javascriptserializer

#json #asp.net-mvc-3 #javascriptserializer

Вопрос:

Я хочу передать сериализованный объект json и вернуть его в результате пользовательского помощника Html. Что-то вроде этого

 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 где-нибудь в результирующей разметке.

Upd: Я даже пытался это сделать:

 sJson.replace(""","amp;quot;")
  

Не помогает. Браузер автоматически преобразует amp;quot; s в " . Я не знаю, как сохранить разметку

Комментарии:

1. Это то, что я использовал: JSON.parse(‘@Html.Raw(Json. Кодирование (модель))’)

Ответ №1:

Это html.Закодировать ответ?

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

Ответ №2:

Я думаю, единственным решением было бы заменить все двойные кавычки в oSerializer.Сериализуйте (MyObject)) каким-либо другим символом, который не конфликтовал бы с html-разметкой, а затем перед синтаксическим анализом заключите двойные кавычки обратно, иначе это не была бы законная строка json.