2009-04-29 15 views
1

Die ASP.net-Seite, an der ich gerade arbeite, enthält eine Dropdown-Liste, die eine Liste von Filtern enthalten soll. Wenn der Benutzer den Filter auswählt, möchte ich ein Benutzersteuerelement anzeigen, das für den Filter geeignete Eigenschaften aufweist.Dynamische Auswahl eines Asp.Net MVC-Benutzersteuerelements

Hier ist die Controller-Aktion in Frage:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(FormCollection collection) 
{ 
    var filterType = Request.Form["FilterSelect"]; 
    ViewData["FilterChosen"] = filterType; 
    PopulateSelectionFiltersData();//This method fills up the drop down list 
    //Here is where I would like to switch based on the filterType variable 
    return View(); 
} 

Der Filtertyp Variable hat den richtigen Wert, aber ich bin nicht sicher, wie man den nächsten Teil zu tun.

Auch als eine logische Frage, was wäre der beste Weg, um den ausgewählten Drop-Down-Wert zwischen den Anrufen zu erhalten?

Vielen Dank,

KevDog

Antwort

3

Speichern Sie die korrekte Steuerung in Viewdata angezeigt werden soll. Was das Behalten der Menüs anbelangt, sind die Optionen Cache (wird von vielen Sitzungen verwendet), Session (wird nur von dieser Sitzung verwendet) oder TempData (nur für die nächste Methode in dieser Sitzung verwendet). Alternativ können Sie es in Ihrem DataLayer zwischenspeichern. In der Regel werden die Daten nur erneut abgerufen, bis sie zu einem Leistungsproblem werden - was normalerweise nicht der Fall ist.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(FormCollection collection) 
{ 
    var filterType = Request.Form["FilterSelect"]; 
    ViewData["FilterChosen"] = filterType; 
    PopulateSelectionFiltersData();//This method fills up the drop down list 

    string userControl = "DefaultControl"; 
    switch (filterType) 
    { 
     case "TypeA": 
     userControl = "TypeAControl"; 
     break; 
     ... 
    } 

    ViewData["SelectedControl"] = userControl; 
    return View(); 
} 


<% Html.RenderPartial(ViewData["SelectedControl"], Model, ViewData); %> 
+0

Sie müssen das RenderPartial ändern, um das Gleichheitszeichen zu entfernen und ein Semikolon am Ende hinzuzufügen. Ansonsten ist das perfekt. – KevDog

+0

@KevDog - schöner Fang. Korrigiert. – tvanfosson