2009-04-29 8 views
1

La page ASP.net sur laquelle je travaille actuellement comporte une liste déroulante destinée à contenir une liste de filtres. Lorsque l'utilisateur sélectionne le filtre, je souhaite afficher un contrôle utilisateur possédant des propriétés appropriées pour le filtre.Choix dynamique d'un contrôle utilisateur Asp.Net MVC

Voici l'action du contrôleur en question:

[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(); 
} 

La variable de type de filtre a la valeur correcte, mais je ne suis pas certain de la façon de faire la partie suivante.

En outre, comme question corollaire, quelle serait la meilleure façon de conserver la valeur déroulante sélectionnée entre les appels?

Un grand merci,

KevDog

Répondre

3

magasin le contrôle correct à afficher dans ViewData. En ce qui concerne la persistance des menus, vos choix sont le Cache (utilisé par de nombreuses sessions), Session (utilisé uniquement par cette session), ou TempData (utilisé uniquement pour la méthode suivante dans cette session). Vous pouvez également le mettre en cache dans votre DataLayer. En règle générale, je ne fais que récupérer les données jusqu'à ce qu'elles deviennent un problème de performances - ce qui n'est généralement pas le cas.

[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

Vous devez modifier RenderPartial pour éliminer le signe égal et ajouter un point-virgule à la fin. Sinon, c'est parfait. – KevDog

+0

@KevDog - belle prise. Corrigée. – tvanfosson

Questions connexes