8 Stimmen

Wohin mit dem Code der Hauptseite in einer MVC-Anwendung?

Ich bin mit ein paar (2 oder 3) Master-Seiten in meinem ASP.NET MVC-Anwendung und sie müssen jeweils Bits von Informationen aus der Datenbank anzeigen. Zum Beispiel eine Liste der Sponsoren, den aktuellen Stand der Finanzierung usw.

Meine Frage war also, wo sollte ich den Code für den Aufruf der Master-Page-Datenbank unterbringen?

Normalerweise sollten diese in eine eigene Controller-Klasse gehen, richtig? Aber dann würde das bedeuten, dass ich sie manuell verdrahten müssen (z.B. Übergabe ViewDatas), da es aus dem normalen Routing-Framework durch das MVC-Framework zur Verfügung gestellt wird.

Gibt es eine Möglichkeit, diese sauber, ohne Verdrahtung ViewData passing/Action Aufrufe zu Master-Seiten manuell oder Subclassing der Frameworks?

Die Menge der Dokumentation ist sehr gering ... und ich bin sehr neu, all dies einschließlich der Konzepte von MVC selbst so bitte teilen Sie Ihre Tipps/Techniken auf diese.

5voto

Davide Vosti Punkte 2475

Eine Möglichkeit, dies zu tun, besteht darin, in der Masterpage-Ansicht den Hook für die ViewData zu setzen und dann einen BaseController : Controller (oder mehrere Basisklassen) zu definieren, in dem Sie alle benötigten DB-Aufrufe ausführen.

Was Sie tun wollen, ist genau dasselbe wie in este Artikel.

Ich hoffe, das hilft!

Mit freundlichen Grüßen

1voto

Al Katawazi Punkte 7052

Gute Frage. Es stehen Ihnen mehrere Möglichkeiten zur Verfügung.

  1. Führen Sie einen jQuery-Aufruf auf Ihrer Masterseite durch, der die benötigten Daten von einem Controller abruft, und füllen Sie dann Ihre Felder wieder mit jQuery auf.
  2. Die zweite Möglichkeit besteht darin, Benutzersteuerelemente zu erstellen, die ihre eigenen Aufrufe an den Controller richten, um ihre Informationen einzugeben.

Ich denke, die beste Wahl ist die Erstellung von Steuerelementen für den Bereich Ihrer Masterseite, der Daten enthält, die ausgefüllt werden müssen. Auf diese Weise kann die Musterseite ausschließlich Designelemente enthalten. Viel Glück!

0voto

Dane O'Connor Punkte 71184

Wenn Sie nichts gegen stark typisierte Ansichtsdaten haben, können Sie alle Hauptseitendaten in einer gemeinsamen Basisklasse für viewData ablegen. Sie können diese Daten im Konstruktor der Basisklasse festlegen. Alle Ihre Ansichten, die zusätzliche Daten benötigen, benötigen dann stark typisierte viewdata, die von dieser Basisklasse erben.

Um einen Aufruf von View() in Ihren Controllern ohne explizite Viewdata zu ermöglichen, können Sie View in Ihrer ControllerBase außer Kraft setzen:

protected override ViewResult View(string viewName, string masterName, object model)
{
    if (model == null)
    {
        model = new ViewDataBase();
    }
    return base.View(viewName, masterName, model);
}

0 Stimmen

Vielleicht sollten Sie das stattdessen BaseViewData nennen :-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X