2012-04-04 33 views
5

Estoy usando ASP.NET y tengo una cadena de HTML en la base de datos.Almacenar Html.Raw() en una cadena en Javascript, ASP.NET MVC 3

Quiero obtener ese html en una variable en el cliente.

Si hago esto:

var x = '@Html.Raw(myModel.FishValue)' 

funciona bien, porque esencialmente es hacer

var x = '<p>hello!</p>'; 

sin embargo si hay comillas en el html que se rompa la página.

Mi conjetura inicial sería .Colocar la cadena prima para agregar escapa a las cotizaciones, sin embargo, tanto .ToString() y .ToHtmlString() (como Html.Raw devuelve un IHtmlString) no producen el mismo código tan simple Html.Raw().

Así que no sé qué hacer.

Respuesta

9

¿Qué hay de reemplazar antes de llamar al método Html.Raw?

var x = '@Html.Raw(myModel.FishValue.Replace("'","\\'"))' 

ACTUALIZACIÓN:

Puede haber otros caracteres de escape en la cadena provenientes del modelo. Por esa razón, recomendaría reemplazar las barras primero también. Por supuesto, todo depende de lo que pueda venir del servidor en su modelo.

var x = '@Html.Raw(myModel.FishValue.Replace("\\","\\\\'").Replace("'","\\'"))' 

Un fragmento de la muestra que representa el comportamiento en el javascript:

//Let's say my Model Content is > I'd Say \ is a escape character. You can't "Escape" 
 
    // YOu would have to replace ' --> \' and \ --> \\ 
 
    var stringFromServer = 'I\'d Say \\ is a escape character. You can\'t "Escape"' 
 
    alert(stringFromServer)

1

Prueba esto:

var x = '@(System.Web.HttpUtility.HtmlEncode(myModel.FishValue))'; 

Si necesita decodificar el código HTML en el cliente uso lateral

unescape(x) 

Creo que JQuery (no estoy seguro si lo está usando o no) maneja cadenas HTML codificadas por lo que es posible que no necesite unescape().