Pregunta

Cuando un controlador representa una vista basada en un modelo, puede obtener las propiedades de la colección ViewData usando el indexador (es decir,VerDatos["Propiedad"]).Sin embargo, tengo un control de usuario compartido al que intenté llamar usando lo siguiente:

return View("Message", new { DisplayMessage = "This is a test" });

y en mi control de Mensajes tenía esto:

<%= ViewData["DisplayMessage"] %>

Creo que esto representaría DisplayMessage correctamente, sin embargo, se devuelve nulo.Después de una gran dosis de retoques, finalmente creé una clase "MessageData" para escribir fuertemente mi control de usuario:

public class MessageControl : ViewUserControl<MessageData>

y ahora esta llamada funciona:

return View("Message", new MessageData() { DisplayMessage = "This is a test" });

y se puede mostrar así:

<%= ViewData.Model.DisplayMessage %>

¿Por qué no se agregaría la propiedad DisplayMessage a ViewData (es decir,¿ViewData["DisplayMessage"]) colección sin escribir con fuerza el control del usuario?¿Es esto por diseño?¿No tendría sentido que ViewData contuviera una clave para "DisplayMessage"?

¿Fue útil?

Solución

El método

ViewData.Eval("DisplayMessage") 

debería funcionar para ti.

Otros consejos

Por supuesto, después de crear esta pregunta, inmediatamente encuentro la respuesta después de algunas búsquedas más en Google.

http://forums.asp.net/t/1197059.aspx

Aparentemente esto sucede debido a la clase contenedora.Aun así, parece que cualquier propiedad pasada debería agregarse a la colección ViewData de forma predeterminada.

Realmente necesito dejar de responder mis propias preguntas :(

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top