Asp.net MVC Contrôle utilisateur ViewData
-
09-06-2019 - |
Question
Lorsqu'un contrôleur restitue une vue basée sur un modèle, vous pouvez obtenir les propriétés de la collection ViewData à l'aide de l'indexeur (c.-à-d.ViewData["Propriété"]).Cependant, j'ai un contrôle utilisateur partagé que j'ai essayé d'appeler en utilisant ce qui suit :
return View("Message", new { DisplayMessage = "This is a test" });
et sur mon contrôle Message j'avais ceci :
<%= ViewData["DisplayMessage"] %>
Je pense que cela rendrait correctement le DisplayMessage, cependant, null est renvoyé.Après une grosse dose de bricolage, j'ai finalement créé une classe "MessageData" afin de taper fortement 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 la propriété DisplayMessage ne serait-elle pas ajoutée à ViewData (c.-à-d.ViewData["DisplayMessage"]) sans saisie forte du contrôle utilisateur ?Est-ce intentionnel ?Ne serait-il pas logique que ViewData contienne une clé pour « DisplayMessage » ?
La solution
La méthode
ViewData.Eval("DisplayMessage")
devrait fonctionner pour vous.
Autres conseils
Bien sûr, après avoir créé cette question, je trouve immédiatement la réponse après quelques recherches supplémentaires sur Google.
http://forums.asp.net/t/1197059.aspx
Apparemment, cela se produit à cause de la classe wrapper.Même ainsi, il semble que toute propriété transmise devrait être ajoutée par défaut à la collection ViewData.
Je dois vraiment arrêter de répondre à mes propres questions :(