2011-05-02 40 views
19

Actualmente estoy construyendo un sitio web en ASP.NET MVC. Estoy intentando acceder a ViewData en javascript.ASP.NET MVC usando ViewData en javascript

¿Hay alguna manera de que pueda acceder a un valor de cadena mediante javascript en una vista que se almacenó en ViewData en una acción de controlador. (No puedo descifrar la sintaxis correcta).

deseo de hacer algo como ..

 

var str = ViewData["Text"]; 

He intentado lo siguiente:

var str = <% = ViewData [ "texto"]%>

pero no me paré' t trabajo.

¿Puede alguien ayudarme por favor.

Gracias.

Respuesta

45

gusta esta (Razor):

var str = @Html.Raw(Json.Encode(ViewData["Text"])); 

o (Web Forms), utilizando el JavaScriptSerializer (y después de importar theproper espacio de nombres a su formulario web - System.Web.Script.Serialization):

var str = <%= new JavaScriptSerializer().Serialize(ViewData["Text"])) %>; 

Y no utilice ViewData en una aplicación ASP.NET MVC en. Utilizar modelos de vista y puntos de vista inflexible para que su código es el siguiente:

var str = <%= new JavaScriptSerializer().Serialize(Model.Text) %>; 

Esta técnica es aún más frío que ahora se puede JSON serializar toda la vista del modelo:

var model = <%= new JavaScriptSerializer().Serialize(Model) %>; 
var str = model.Text; 
+0

Gracias por la respuesta en profundidad señor. – ElvisLives

10

Eso debería ser:

var str = '<%= ViewData["Text"] %>'; 
+4

No, eso es muy malo. Nunca use algo como esto en una aplicación del mundo real. ¿Qué pasa si el texto contiene una cita? Este código es bastante vulnerable a los ataques XSS, especialmente si este texto proviene de la entrada del usuario. –

+1

Ya estaba * tan * cerca, pensé que sería más útil responder a la pregunta que hacerlo que complicarlo demasiado. –

+8

¡esta no es una respuesta a la pregunta! Esta es una invitación a ataques XSS y malas prácticas publicitarias. No estamos hablando de complicar demasiado aquí. Estamos hablando de responder la pregunta. ¿Cómo se puede decir que esto responde la pregunta? Quiero decir que este código se romperá pronto y estará sujeto a otra pregunta más. No puedo creer que esta pregunta haya sido actualizada y aún no la haya eliminado para que no se indexe, ya que alguien podría usarla en su aplicación. –

Cuestiones relacionadas