Динамический выбор пользовательского элемента управления Asp.Net MVC - PullRequest
1 голос
/ 29 апреля 2009

На странице ASP.net, над которой я сейчас работаю, есть раскрывающийся список, в котором должен быть список фильтров. Когда пользователь выбирает фильтр, я хотел бы отобразить пользовательский элемент управления, который имеет свойства, подходящие для фильтра.

Вот действие контроллера, о котором идет речь:

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

Переменная типа фильтра имеет правильное значение, но я не уверен, как сделать следующую часть.

Кроме того, как следствие, каков наилучший способ сохранить выбранное значение раскрывающегося списка между вызовами?

Большое спасибо,

KevDog

1 Ответ

3 голосов
/ 29 апреля 2009

Сохраните правильный элемент управления для отображения в ViewData. Что касается сохранения меню, Вы можете выбрать Cache (используется многими сеансами), Session (используется только этим сеансом) или TempData (используется только для следующего метода в этом сеансе). В качестве альтернативы, вы можете кэшировать его в своем DataLayer. Обычно я просто перезагружаю данные до тех пор, пока они не станут проблемой производительности, чего обычно не происходит.

[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 ); %>
...