2010-01-08 7 views
5

Ich versuche zu verstehen, wie man am besten einige gemeinsame Dropdown-Listen in verschiedenen Ansichten verwendet zu organisieren (einige kaskadieren)MVC - Wie am besten häufig verwendete Dropdown-Listen in vielen Ansichten organisieren

ist es am besten zu erstellen eine einzelne \ Models \ CommonQueries dann für jede Drop-Down in Cascading Situation einen einzelnen Controller verwendet haben eine Webservice erstellen dann die

auf diese Weise Aktionen für jeden Dropdown-Listen enthält I DRY-Prinzip folgen kann und nicht auf die Drop-Down-Logik wiederholen, da sie in verschiedenen Ansichten verwendet.

Vielen Dank und Grüße zum Lesen meiner Frage und nehmen Sie Ihre Zeit. + ab

Antwort

2

Wenn Sie sagen, dass Ihre Dropdown-Listen in verschiedenen Ansichten verwendet werden, betrachten Sie diese Dropdown-Listen immer noch als Teil der Ansicht, die sie darstellt? Wenn dem so ist, denke ich, dass die Verwendung eines benutzerdefinierten HTML-Helpers oder einer Teilansicht (ascx) angemessen ist. Dann können Sie, wie Sie vorschlagen, die Daten für die Dropdown-Listen mit einem gemeinsamen Dienst aus Ihrer Domänenebene füllen. Ich denke, das ist ein sehr vernünftiger Ansatz.

Wenn Sie jedoch der Meinung sind, dass die Dropdown-Listen etwas mit der Ansicht nicht zu tun haben, können Sie feststellen, dass die Verwendung von Html.RenderAction() ein wesentlich saubereres Ergebnis liefert. Mit Html.RenderAction() können Sie das Ergebnis einer Action-Methode direkt in eine andere Ansicht ausgeben. Daher können Sie einen Controller mit den erforderlichen Aktionsmethoden erstellen, um diese Dropdownlisten zu füllen. Nehmen wir zum Beispiel sagen, dass Sie mit grob etwas Blick haben wie:

<div> 
    <div id="coreView1"> 
     <!-- some view code here --> 
    </div> 
</div> 

<div id="commonDropdowns"> 
     <% Html.RenderAction("Create", "Dropdown"); %> 
</div> 

wo erstellen ist der Name Ihrer Methode in der Dropdowncontroller.

Zum Beispiel:

public class DropdownController : Controller 
{ 
    public ViewResult Create() 
    { 
     // do stuff here to create the ViewResult of the common Dropdowns 
    } 
} 

Hinweis: Manche Menschen mögen diesen Ansatz, da es nicht die typische MVC Trennung von Bedenken paßt. Es kann jedoch für einige Fälle sehr gut geeignet sein.

Hoffnung einer dieser Ansätze kann helfen.

+1

Es sollte beachtet werden, dass Html.RenderAction nicht in ASP.NET MVC 1.0 enthalten ist. Es ist ein separates Add-On. http://eduncan911.com/blog/html-renderaction-for-asp-net-mvc-1-0.aspx Aber es wird mit ASP.NET MVC 2.0 Beta (endlich!) enthalten sein. – eduncan911

+0

Danke eduncan, guter Punkt! Einige Informationen und Referenzen hier: http://davidhayden.com/blog/dave/archive/2009/04/04/ASPNETMVCPartialViewsHtmlRenderActionASPNETMVCFutures.aspx –

+0

Vielen Dank für Ihre Antworten. Ich bin in MVC1. Ich muss es vielleicht auf MVC2 portieren und ausprobieren. Aber trotzdem, in MVC1, habe ich den Weg der Organisation von \ Model \ CommonQueries gewählt und verwende ihn in den Ansichten, in denen das Dropdown-Menü verwendet wird, und in der Ansicht, in der es gepflegt ist. Ich versuche nun, mit dem Webservice zu kaskadieren, aber das funktioniert nicht. Jetzt die Route von JSON gehen. Es macht Spaß Spaß. Danke noch einmal. –