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"?