2008-08-20 37 views
5

Wenn ein Controller eine Ansicht basierend auf einem Modell rendert, können Sie die Eigenschaften aus der ViewData-Auflistung mithilfe des Indexers abrufen (dh ViewData ["Property"]). Ich habe jedoch eine gemeinsame Benutzersteuerung, die ich versuchte mit den folgenden zu nennen:Asp.net MVC Benutzersteuerung ViewData

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

und auf meiner Nachricht Kontrolle hatte ich dies:

<%= ViewData["DisplayMessage"] %> 

Ich würde denken, dies richtig die Displaymessage machen würde, NULL wird jedoch zurückgegeben. Nach einer starken Dosis um Bastelei, habe ich endlich eine „Message“ Klasse, um stark zu meinem Benutzer Steuerart:

public class MessageControl : ViewUserControl<MessageData> 

und jetzt dieser Aufruf funktioniert:

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

und kann wie angezeigt dies:

<%= ViewData.Model.DisplayMessage %> 

Warum sollte die Displaymessage-Eigenschaft nicht auf das Viewdata (dh Viewdata [ „Displaymessage“].) hinzugefügt werden Sammlung ohne starke Typisierung der Benutzer die Kontrolle? Ist das Absicht? Wäre es nicht sinnvoll, dass ViewData einen Schlüssel für "DisplayMessage" enthält?

Antwort

6

Verfahren

ViewData.Eval("DisplayMessage") 

sollte für Sie arbeiten.

2

Natürlich nachdem ich erstellen, um diese Frage, die ich sofort finden Sie die Antwort nach ein paar Suchanfragen auf Google

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

Offenbar dies wegen der Wrapper-Klasse geschieht. Trotzdem scheint es so, als würde jede übergebene Eigenschaft standardmäßig zur ViewData-Sammlung hinzugefügt werden.

Ich brauche wirklich meine eigenen Fragen zu stoppen Beantwortung :(

Verwandte Themen