Scelta dinamica di un controllo utente MVC Asp.Net
-
03-07-2019 - |
Domanda
La pagina ASP.net su cui sto attualmente lavorando ha un elenco a discesa destinato a contenere un elenco di filtri. Quando l'utente seleziona il filtro, vorrei visualizzare un controllo utente con proprietà appropriate per il filtro.
Ecco l'azione del controller in questione:
[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 variabile del tipo di filtro ha il valore corretto, ma non sono sicuro su come eseguire la parte successiva.
Inoltre, come domanda corollaria, quale sarebbe il modo migliore per mantenere il valore a discesa selezionato tra le chiamate?
Mille grazie,
KevDog
Soluzione
Memorizza il controllo corretto da visualizzare in ViewData. Per quanto riguarda il persistere dei menu, le scelte sono Cache (utilizzata da molte sessioni), Session (utilizzata solo da questa sessione) o TempData (utilizzata solo per il metodo successivo in questa sessione). In alternativa, potresti averlo memorizzato nella cache nel tuo DataLayer. In genere, recupero solo i dati fino a quando non diventa un problema di prestazioni, cosa che di solito non accade.
[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 ); %>