Frage

Wenn ein Controller eine Ansicht basierend auf einem Modell rendert, können Sie die Eigenschaften mithilfe des Indexers aus der ViewData-Sammlung abrufen (d. h.ViewData["Eigenschaft"]).Ich habe jedoch ein gemeinsames Benutzersteuerelement, das ich wie folgt aufzurufen versucht habe:

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

und auf meiner Nachrichtensteuerung hatte ich Folgendes:

<%= ViewData["DisplayMessage"] %>

Ich würde denken, dass dies die DisplayMessage korrekt rendern würde, allerdings wird null zurückgegeben.Nach einer Menge Herumtüfteln habe ich schließlich eine „MessageData“-Klasse erstellt, um mein Benutzersteuerelement stark zu typisieren:

public class MessageControl : ViewUserControl<MessageData>

und jetzt funktioniert dieser Aufruf:

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

und kann so angezeigt werden:

<%= ViewData.Model.DisplayMessage %>

Warum sollte die DisplayMessage-Eigenschaft nicht zu ViewData hinzugefügt werden (d. h.ViewData["DisplayMessage"])-Sammlung ohne starke Eingabe des Benutzersteuerelements?Ist das beabsichtigt?Wäre es nicht sinnvoll, dass ViewData einen Schlüssel für „DisplayMessage“ enthalten würde?

War es hilfreich?

Lösung

Die Methode

ViewData.Eval("DisplayMessage") 

sollte für Sie funktionieren.

Andere Tipps

Nachdem ich diese Frage erstellt habe, finde ich die Antwort natürlich sofort nach ein paar weiteren Suchanfragen bei Google

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

Anscheinend liegt das an der Wrapper-Klasse.Trotzdem scheint es, als ob jede übergebene Eigenschaft standardmäßig zur ViewData-Sammlung hinzugefügt werden sollte.

Ich muss wirklich aufhören, meine eigenen Fragen zu beantworten :(

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top