Estoy usando ASP.NET MVC y estoy tratando de generar una pieza de Javascript como parte de la representación de la vista. Tengo un modelo que expone una matriz de tipos simples y me gustaría generar una matriz equivalente de JavaScript/json en la vista para que pueda actuar sobre ella usando jQuery. Así que dado el siguiente modelo:Generar una matriz JSON sin procesar en ASP.NET MVC
public class Info {
public string Name {get;set;}
public int ID {get; set;}
}
public class InfoModel{
public Info[] InfoList {get;set;}
}
... Querría para generar una matriz de JavaScript con este aspecto:
var infoList = [
{
Name = "...",
ID = 1
} ,
{
Name = "...",
ID = 2
},
....
{
Name = "...",
ID = N
}];
¿Hay una manera agradable y concisa de hacer esto en la vista, Parece que tengo problemas con la codificación de las comillas si intento que el modelo genere una representación json, por lo que actualmente solo puedo generarlo utilizando un código de espaghetti/asp clásico que preferiría haber reemplazado por un buen trazador de líneas.
EDITAR: Tenga en cuenta que no estoy buscando que un controlador devuelva un JsonResult, quiero que mi vista contenga una matriz de javascript que se genera desde mi modelo en una sola línea de código (si es posible))
EDIT: Llegué a una parte del camino, pero parece estar luchando con la codificación. Este código en la vista:
<script>
var list = <%: HtmlExtension.ToJson(Model.InfoList) %>;
</script>
(donde toJSON encapsula la conversión a cadena mediante JavaScriptSerializer) da salida a algunos fallos de codificación:
var info = [{"Name":"Low End","ID":1}];
..which no es lo que estaba buscando. Podría hacer esto:
var info = <% Response.Write(HtmlExtension.ToJson(Model.InfoList)); %>;
que funciona, pero no se ve tan brillante. ¿Debo ignorar explícitamente la codificación como se muestra (La salida es sensata, no generada por el usuario, por lo que puede no ser un problema) o me falta algo más que la hace menos clásica?
¡SÍ! gracias Jonathan, el MvcHtmlString fue la magia que estaba esperando ... –
Pude utilizar esta línea de código en mi archivo HTML de afeitar: MvcHtmlString.Create (Json.Encode (Modelo)) – bkwdesign
Exactamente. Al final es 'MvcHtmlString' la clave. –