Ich habe mehrere Controller, von denen ich möchte, dass jedes ActionResult dieselben viewdata zurückgibt. In diesem Fall weiß ich, dass ich immer grundlegende Produkt- und Mitarbeiterinformationen brauche.
Im Moment habe ich so etwas gemacht:
%Vor%Wo PopulateGlobalData () definiert ist als:
%Vor%Dies ist nur Pseudo-Code, also verzeiht offensichtliche Fehler, gibt es einen besseren Weg, dies zu tun? Ich dachte daran, dass mein Controller eine Klasse erben würde, die genau das gleiche macht, was Sie hier sehen, aber ich sah keinen großen Vorteil darin. Es fühlt sich an, als wäre das, was ich tue, falsch und unpassend. Was ist der beste Weg, um das zu tun?
Sie könnten ein benutzerdefiniertes Aktionsfilterattribut schreiben, das abgerufen wird Diese Daten werden im View-Modell jeder mit diesem Attribut dekorierten Aktion / Controller gespeichert.
%Vor%Natürlich wäre es viel sauberer, ein Basisansichtsmodell und stark typisierte Ansichten zu verwenden:
%Vor%Jetzt müssen Sie nur noch Ihren Basis-Controller mit diesem Attribut dekorieren:
%Vor%Es gibt noch eine andere interessante Lösung, die ich persönlich bevorzuge und die untergeordnete Aktionen . Hier definieren Sie einen Controller, der das Abrufen dieser Informationen übernimmt:
%Vor%Und jetzt ist alles, was übrig ist , wo immer nötig (wahrscheinlich die Masterseite, wenn global):
%Vor%oder wenn die ID Teil der Routen ist:
%Vor%Ich dachte daran, dass mein Controller eine Klasse erben würde, die genau das Gleiche tut, was Sie hier sehen, aber ich sah darin keine großen Vorteile.
Das ist meiner Meinung nach der richtige Weg. Sie würden eine Basis-Controller-Klasse erstellen, die diese Funktionalität bietet. Wenn Sie mit dem ASP.NET-WebForms-Modell vertraut sind, ähnelt dies der Erstellung einer benutzerdefinierten Basis Page
class .
Was die Vorteile der Einordnung in eine Basisklasse betrifft, sind die Hauptvorteile Lesbarkeit, Wartbarkeit und Wiederverwendbarkeit. Wenn Sie die oben genannte Methode in jeden Controller kopieren und einfügen, der sie benötigt, wird es für Sie schwieriger, wenn Sie im weiteren Verlauf neue Informationen zur Sammlung ViewData
hinzufügen müssen.
Kurz gesagt, wenn Sie sich beim Kopieren und Einfügen von Code zwischen Klassen oder Ansichten in Ihrer Anwendung ertappen, sollten Sie aufhören und darüber nachdenken, wie Sie diese Logik an einem einzigen Ort ablegen können. Weitere Informationen finden Sie auf DRY - Wiederholen Sie sich nicht .
Tags und Links asp.net-mvc asp.net