Lorsqu'un contrôleur rend une vue basée sur un modèle, vous pouvez obtenir les propriétés de la collection ViewData à l'aide de l'indexeur (par exemple, ViewData ["Property"]). Cependant, j'ai un contrôle utilisateur partagé que j'ai essayé d'appeler en utilisant les éléments suivants:Contrôle d'utilisateur MVC Asp.net ViewData
return View("Message", new { DisplayMessage = "This is a test" });
et mon contrôle du message j'ai eu ceci:
<%= ViewData["DisplayMessage"] %>
Je pense cela rendrait correctement le DisplayMessage, cependant, null est retourné. Après une forte dose de bricoler, j'ai finalement créé une classe « MessageData » afin de typer mon contrôle utilisateur:
public class MessageControl : ViewUserControl<MessageData>
et maintenant cet appel fonctionne:
return View("Message", new MessageData() { DisplayMessage = "This is a test" });
et peut être affiché comme ceci:
<%= ViewData.Model.DisplayMessage %>
Pourquoi pas la propriété DisplayMessage être ajouté à la collection ViewData (c.-à-ViewData [ "DisplayMessage"].) sans typage fort le contrôle de l'utilisateur? Est-ce par conception? Ne serait-il pas logique que ViewData contienne une clé pour "DisplayMessage"?