Несколько групп переключателей в 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;}
}
Ответы
Ответ 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 и обработать свое действие