2016-04-08 12 views
0

Ich habe eine ASP.Net MVC-Anwendung und einige der Controller-Aktionen haben etwa 10 Auswahllisten (andere haben mehr). Derzeit ist mein Code sieht wie folgt aus:Zu viele Auswahllisten verschmutzen meine Controller-Aktionen

public ActionResult Edit(int carId) 
{ 
    CreateCar model = new CreateCar(); 

    model.Makes = Helper.Makes(); 
    model.Models = Helper.Models(); 
    model.Colors = Helper.Colors(); 
    model.EngineSizes = Helper.EngineSizes(); 
    model.Materials = Helper.Materials(); 
    model.FuelTypes = Helper.FuelTypes(); 
    model.WheelSizes = Helper.WheelSizes(); 
    model.BodyTypes = Helper.BodyTypes(); 
    //more select lists below this 

    return View(model) 
} 

In meiner Ansichten i Setup Auswahllisten wie folgt aus:

@Html.DropDownListFor(x => x, Model.Makes) 

Ich habe Code, der in einer Reihe von Aktionen wie folgt aussieht und ich fühle es eine bessere ist So werden meine Aktionen nicht mit diesen Auswahllisten belastet.

Die einzige Option, die ich mir vorstellen kann, um dies zu umgehen, ist, rufen Sie die Helper-Klasse in den Ansichten z.

@Html.DropDownListFor(x => x, Helper.Makes()) 

Wird dieser Ansatz als schlechte Praxis angesehen und gibt es andere Ansätze, um dieses Problem zu lösen?

Antwort

1

Im Allgemeinen, ja, es ist schlechte Praxis, solche Dinge aus Ihrer Sicht zu tun. Der Controller ist dafür verantwortlich, alles zu verkabeln, also sollte dein Code dorthin gehen. Jetzt hängt es sehr davon ab, was Ihre Helper Klasse macht. Wenn die Auswahllisten nur über ein wenig Code generiert werden, ist es wahrscheinlich nicht so schlimm, dass dies in der Ansicht geschieht, aber Sie möchten nicht Datenbankabfragen absetzen, während die Ansicht gerendert wird. Wenn Ihr Helfer mit einer Datenbank interagiert, behalten Sie sie im Controller.

Das sagte, was ist das eigentliche Problem hier? Sicher, das ist eine Menge Auswahllisten, aber ich würde nicht so weit gehen zu sagen, dass es Ihre Aktion "verschmutzt". Es ist sehr klar, was du tust. Die Aktion ist verantwortlich für das Erstellen des Modells für Ihre Ansicht, und das ist es, was es tut. Nur weil es in Ihrem Code viele Zeilen gibt, heißt das nicht unbedingt "schlecht" oder "falsch".

Wenn Sie dies jedoch an vielen Stellen wiederholen, würde ich empfehlen, es in eine private oder geschützte Methode auf Ihrem Controller zu zerlegen. Zum Beispiel:

public ActionResult Edit(int carId) 
{ 
    ... 

    PopulateSelectLists(model); 
    return View(model); 
} 

[HttpPost] 
public ActionResult Edit(Foo model, int carId) 
{ 
    ... 

    PopulateSelectLists(model); 
    return View(model); 
} 

private void PopulateSelectLists(Foo model) 
{ 
    model.Makes = Helper.Makes(); 
    model.Models = Helper.Models(); 
    model.Colors = Helper.Colors(); 
    model.EngineSizes = Helper.EngineSizes(); 
    model.Materials = Helper.Materials(); 
    model.FuelTypes = Helper.FuelTypes(); 
    model.WheelSizes = Helper.WheelSizes(); 
    model.BodyTypes = Helper.BodyTypes(); 
    //more select lists below this 
} 

Dann ist alles sauber und ordentlich.