2008-08-20 25 views
5

Cuando un controlador representa una vista basada en un modelo, puede obtener las propiedades de la colección ViewData utilizando el indexador (es decir, ViewData ["Property"]). Sin embargo, tengo un control de usuario compartida que traté de llamar utilizando la siguiente:Asp.net MVC Control de usuario ViewData

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

y en mi control Mensaje tuve esto:

<%= ViewData["DisplayMessage"] %> 

Yo pensaría que esto haría que el DisplayMessage correctamente, sin embargo, se devuelve null. Después de una fuerte dosis de retoques alrededor, finalmente creado una clase "MessageData" con el fin de 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 pueden mostrar como esto:

<%= ViewData.Model.DisplayMessage %> 

¿Por qué no se añadiría la propiedad DisplayMessage a la ViewData (es decir ViewData [ "DisplayMessage"].) recogida sin la tipificación estricta el control de usuario? ¿Esto es por diseño? ¿No tendría sentido que ViewData contuviera una clave para "DisplayMessage"?

Respuesta

6

El método

ViewData.Eval("DisplayMessage") 

debe trabajar para usted.

2

Por supuesto después de crear esta pregunta inmediatamente encuentro la respuesta después de unas cuantas búsquedas en Google

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

Al parecer, esto ocurre debido a la clase de contenedor. Aun así, parece que cualquier propiedad aprobada debe agregarse a la colección ViewData de forma predeterminada.

que realmente necesitan dejar de responder a mis propias preguntas :(

Cuestiones relacionadas