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

Était-ce utile?

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 :(

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top