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

È stato utile?

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 ); %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top