2009-04-29 4 views
1

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

Здесь действие контроллера в вопросе:

[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

ответ

3

магазин правильное управление для отображения в ViewData. Что касается сохранения меню, , то ваш выбор - это кеш (используется многими сеансами), сеанс (используется только этим сеансом) или 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); %> 
+0

Необходимо изменить RenderPartial, чтобы исключить знак равенства и добавить точку с запятой в конце. В противном случае это прекрасно. – KevDog

+0

@KevDog - хороший улов. Исправленный. – tvanfosson

Смежные вопросы