2009-04-01 10 views
5

Ich versuche, das neue ASP .NET MVC-Framework zu lernen und möchte die beste Praxis für die Verwendung von UserControls kennen.ASP.NET MVC korrigieren UserControl Architektur

Ich verstehe, dass Sie UserControls als partiell und Daten von einem Controller an sie weitergeben können. Idealerweise würde ich meinen, dass es keinen Sinn macht, einen Code hinter der Datei zu haben, da dies die Versuchung schafft, die MVC-Regeln zu brechen.

Ich gebe ein Beispiel, wo ich nicht verstehe, wie UserControls in das Muster passen.

Ich habe ein Benutzersteuerelement, das die neuesten Tags (ähnlich wie auf Stackoverflow) zeigt. Im Gegensatz zu StackOverflow I möchte ich dieses UserControl auf all meiner Seiten anzeigen. Wenn ich einen Controller habe, sagen Sie QuestionController , die Handlungen von einige Frageansichten z. Ansicht und Detail, bedeutet dies, ich muss die Daten in der QuestionController und dann übergeben Sie es an das UserControl?

Wenn ich erstellen Sie einen anderen Controller sagen SearchController dann würde ich die gleiche Funktionalität die neuesten Tags wieder zu einem Teil passieren bekommen replizieren. Bedeutet das nicht, dass die 2 verschiedenen Controller tun zusätzliche Dinge, die sie nicht ursprünglich tun sollten?

Antwort

4

Wenn Ihr Usercontrol auf jeder Seite angezeigt wird, dann einen Weg, um dieses Problem anzugehen wäre, eine Basis-Controller zu verwenden, aus dem alle Ihre Controller ableiten und erzeugen die Viewdata für die Usercontrol durch die OnActionExecuting Methode überschrieben und die Logik setzen Dort. Wenn Ihr Benutzersteuerelement weniger verbreitet ist, aber dennoch häufig auf der gesamten Site verwendet wird, können Sie ActionFilterAttribute erweitern und Ihr Filter die erforderlichen Daten generieren lassen. Dieses Attribut könnte verwendet werden, um die Controller oder Aktionen zu dekorieren, die Ansichten generieren, die das Benutzersteuerelement verwenden.

Ich nehme in all dem an, dass die Daten für das UserControl unabhängig von der Aktion sind, die aufgerufen wird. Wenn es eine Abhängigkeit gibt, ist es wahrscheinlich am besten, die Logik in eine Klasse (oder Klassen, möglicherweise unter Verwendung von Strategie) zu schieben und die Generierung der Daten in jeder Aktion oder jedem Controller explizit zu machen (über das Überschreiben von OnActionExecuting).

-1

Sie können auch in Betracht ziehen, Ihre Modellklassen in einer Hierarchie zu platzieren. Die Oberklasse (oder eine der Oberklassen) enthält Daten, die für Ihre umfassenden Benutzersteuerelemente erforderlich sind. Dann können Sie diese häufig verwendeten Daten in einer Basis-Controller-Klasse laden.

4

Alternativ können Sie mit ASP.NET MVC 2 jetzt RenderAction verwenden, um eine komplett neue Controller-Aktion aufzurufen, die die Daten abrufen kann. Dies macht Ihren Code viel modularer und es ist klarer, woher die Daten kommen.

+0

oooo das klingt wie genau das, was ich brauche! – Alex