2016-01-11 4 views
1

enter image description hereAsp.net MVC множественных радиокнопки группа

Я работаю на странице, где несколько групп радио кнопки загружается из кода. Он может 2,3,4 .... и поэтому каждая группа переключателей может содержать один или несколько переключателей, как показано на рис.

Рабочий процесс: пользователь выбирает радиокнопку, а сетка ниже фильтрует результат по мере того, как все больше и больше переключателей переключаются, результаты сетки уменьшаются до тех пор, пока пользователь не получит то, что хочет.

Мне нужно захватить все переключатели, которые были нажаты в действии Controller.

public ActionResult index(IEnumerable<string> selectedRadioButtons) 
{ 
} 

Это не работает. Любая идея, как я могу это реализовать.

Модель

public class Person 
{ 
    public string Name {get;set;} 
    public IEnumerable<FavoriteGroup> Favorites {get;set;} 
} 

public class FavoriteGroup 
{ 
    public string GroupName {get;set;} 
    public IEnumerable<KeyValuePair> Options {get;set;} 
} 

enter image description here

+0

Необходимо показать свое мнение. –

ответ

2

Пока вы манипулируете имя поля формы, чтобы соответствовать вашим свойствам вида модели/иерархической-структуру, она будет работать.

Давайте добавим новое свойство в ваш класс FavoriteGroup, чтобы сохранить выбранное значение переключателя.

public class FavoriteGroup 
{ 
    public string GroupName { get; set; } 
    public IEnumerable<KeyValuePair<int, string>> Options { get; set; } 
    public int SelectedAnswer { set; get; } 
} 

А на ваш взгляд,

@model YourNameSpaceHere.Person 
@using (Html.BeginForm()) 
{ 
    var qCounter = 0; 

    foreach (var favoriteGroup in Model.Favorites) 
    {  
     <h4>@favoriteGroup.GroupName</h4> 

     @Html.HiddenFor(f => f.Name) 
     foreach (var option in favoriteGroup.Options) 
     { 
      @Html.Hidden("Favorites[" + qCounter + "].GroupName", favoriteGroup.GroupName) 

      @Html.RadioButton("Favorites[" + qCounter + "].SelectedAnswer", option.Key) 
      <span>@option.Value</span> 

     } 
     qCounter++; 
    }  
    <input type="submit" /> 
} 

Предполагая, что вы отправляете правильный объект Person со свойствами, заполненных с некоторыми данными.

И ваш метод действия HttpPost будет,

[HttpPost] 
public ActionResult Index(Person vm) 
{ 
    foreach (var group in vm.Favorites) 
    { 
     var groupName = group.GroupName; 
     var selected = group.SelectedAnswer; 
     //do something with these 
    } 
    // to do : Return something 
} 

Другим решением является использование EditorTemplates, в котором вам не нужно манипулировать имена полей, как то, что мы делали выше.

+0

Большое вам спасибо. Это сработало. –

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