Подтвердить что ты не робот

Несколько групп переключателей в MVC 4 Razor

Мне нужно иметь несколько групп переключателей в моей форме:
enter image description here

Я знаю, что это просто сделано, указав одно и то же "имя" html-атрибут для каждой группы. ОДНАКО
MVC не позволяет указать свой собственный атрибут имени при использовании html-помощника, например:

@Html.RadioButtonFor(i => item.id, item.SelectedID, new { Name = item.OptServiceCatId })  

Потому что он смотрит на каждый атрибут "name" (не "id" ) для сопоставления/привязки формы к модели, которую получает контроллер, и т.д.

Некоторые сказали, что указание каждого с тем же атрибутом "GroupName" решит проблему, но это тоже не сработало.

Итак, есть ли способ, который работает?

EDIT:
Здесь мой взгляд (упрощенный):

@model Service_Provider.ViewModels.SelectOptServicesForSubServiceViewModel

@foreach (var cat in Model.OptServices)
{
  //A piece of code & html here
  @foreach (var item in cat.OptItems.Where(i => i.MultiSelect == false))
  {
     @Html.RadioButtonFor(i => item.id, item.SelectedID, new { GroupName = item.OptServiceCatId })
<br />
  }    
}

Примечание:
Моя модель - List<OptServices>:

public List<OptServices> Cats {get; set;}

И OptServices имеет List OptItems внутри:

public class OptServices
{
//a few things
public List<OptItems> Items {get; set;}
}
4b9b3361

Ответ 1

Хорошо, как я исправил это

Моя модель < <20 > категорий. Каждая категория содержит list ее подкатегорий.
имея в виду, что каждый раз в цикле foreach каждый RadioButton будет иметь свой идентификатор категории (который является уникальным) в качестве имени имени.
И я использовал Html.RadioButton вместо Html.RadioButtonFor.

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

@foreach (var cat in Model.Categories)
{
  //A piece of code & html here
  @foreach (var item in cat.SubCategories)
  {
     @Html.RadioButton(item.CategoryID.ToString(), item.ID)
  }    
}

Результат:

<input name="127" type="radio" value="110">

Обратите внимание, что я НЕ помещал все эти группы переключателей в форму. И я не знаю, будет ли это решение работать корректно в форме.

Спасибо всем людям, которые помогли мне решить эту проблему;)

Ответ 2

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

@Html.RadioButtonFor(x => x.Field1, "Milk")
@Html.RadioButtonFor(x => x.Field1, "Butter")

@Html.RadioButtonFor(x => x.Field2, "Water")
@Html.RadioButtonFor(x => x.Field2, "Beer")

Ответ 3

Я установил аналогичную проблему, создав RadioButtonFor с парами текста/значения из SelectList. Я использовал ViewBag для отправки SelectList в представление, но вы также можете использовать данные из модели. Мое веб-приложение - это блог, и я должен создать RadioButton с некоторыми типами статей, когда он пишет новое сообщение.

Код ниже был просто прав.

List<SelectListItem> items = new List<SelectListItem>();

Dictionary<string, string> dictionary = new Dictionary<string, string>();

dictionary.Add("Texto", "1");
dictionary.Add("Foto", "2");
dictionary.Add("Vídeo", "3");

foreach (KeyValuePair<string, string> pair in objBLL.GetTiposPost())
{
    items.Add(new SelectListItem() { Text = pair.Key, Value = pair.Value, Selected = false });
}

ViewBag.TiposPost = new SelectList(items, "Value", "Text");

В представлении я использовал foreach для создания радиообъектива.

<div class="form-group">
    <div class="col-sm-10">
        @foreach (var item in (SelectList)ViewBag.TiposPost)
        {
            @Html.RadioButtonFor(model => model.IDTipoPost, item.Value, false)
            <label class="control-label">@item.Text</label>
        }

    </div>
</div>

Обратите внимание, что я использовал RadioButtonFor, чтобы поймать опцию значение, выбранную пользователем, в Controler, после отправки формы. Мне также пришлось поставить item.Text за пределы RadioButtonFor, чтобы показать параметры текст.

Надеюсь, это полезно!

Ответ 4

Вы можете использовать Dictonary для отображения Предположим, что молоко, масло, Chesse - группа A (ListA) Вода, пиво, вино - группа B

Dictonary<string,List<string>>) dataMap;
dataMap.add("A",ListA);
dataMap.add("B",ListB);

В представлении вы можете выделить Keys в dataMap и обработать свое действие