MVC 4 Razor 中的多个单选按钮组
Posted
技术标签:
【中文标题】MVC 4 Razor 中的多个单选按钮组【英文标题】:Multiple radio button groups in MVC 4 Razor 【发布时间】:2014-04-06 03:17:10 【问题描述】:我的表单中需要有多个单选按钮组,如下所示:
我知道这只是通过为每个组指定相同的“name”html 属性来完成。但是 当使用这样的 html 帮助器时,MVC 不允许您指定自己的 name 属性:
@Html.RadioButtonFor(i => item.id, item.SelectedID, new Name = item.OptServiceCatId )
因为它查看每个标签的“name”属性(不是“id”)来将表单映射/绑定到模型控制器接收等。
有人说为每个人指定相同的“GroupName”属性会解决问题,但它也不起作用。
那么,有什么有效的方法吗?
编辑: 这是我的观点(简化):
@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;
【问题讨论】:
how to show and use Radio button in Asp.Net MVC3的可能重复 【参考方案1】:您只需将组绑定到模型中的不同项目
@Html.RadioButtonFor(x => x.Field1, "Milk")
@Html.RadioButtonFor(x => x.Field1, "Butter")
@Html.RadioButtonFor(x => x.Field2, "Water")
@Html.RadioButtonFor(x => x.Field2, "Beer")
【讨论】:
是的,但问题是每个组的收音机都是在我的代码中的 foreach() 中创建的。 你能展示你的 foreach 吗?我们看看有没有办法让它工作? 当然!我刚刚编辑了我的帖子。请看一看。 看这里***.com/questions/18040474/…和这里***.com/questions/7667495/mvc-radiobuttons-in-foreach 非常感谢马特·博迪利!您的参考资料帮助我解决了这个问题,尽管方式不同。感谢您的帮助【参考方案2】:好的,这就是我解决这个问题的方法
我的模型是类别的list
。每个类别都包含其子类别的list
。
考虑到这一点,每次在 foreach 循环中,每个 RadioButton
都会将其类别的 ID(唯一)作为其 name 属性。
而且我还使用了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">
请注意,我没有将所有这些单选按钮组放在一个表单中。而且我不知道这个解决方案在表单中是否还能正常工作。
感谢所有帮助我解决这个问题的人;)
【讨论】:
【参考方案3】:我修复了一个类似的问题,它使用 SelectList 中的文本/值对构建 RadioButtonFor。我使用 ViewBag 将 SelectList 发送到 View,但您也可以使用模型中的数据。我的 Web 应用程序是一个博客,当他写一篇新文章时,我必须构建一个带有某些类型文章的 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 来捕获用户在控制器中选择的选项 value。为了显示 text 选项,我还必须将 item.Text 放在 RadioButtonFor 之外。
希望有用!
【讨论】:
【参考方案4】:我能够将您在示例中描述的名称属性用于我正在处理的循环并且它有效,也许是因为我创建了唯一的 ID?我仍在考虑是否应该切换到另一个答案中的链接中提到的编辑器模板。
@Html.RadioButtonFor(modelItem => item.Answers.AnswerYesNo, "true", new Name = item.Description.QuestionId, id = string.Format("CBY0", item.Description.QuestionId), onclick = "setDescriptionVisibility(this)" ) Yes
@Html.RadioButtonFor(modelItem => item.Answers.AnswerYesNo, "false", new Name = item.Description.QuestionId, id = string.Format("CBN0", item.Description.QuestionId), onclick = "setDescriptionVisibility(this)" ) No
【讨论】:
【参考方案5】:您可以使用字典来映射 假设 Milk,Butter,Chesse 是 A 组 (ListA) 水、啤酒、葡萄酒是B组
Dictonary<string,List<string>>) dataMap;
dataMap.add("A",ListA);
dataMap.add("B",ListB);
在 View 中,您可以 foreach 数据映射中的键并处理您的操作
【讨论】:
对不起,我不知道该怎么做:/ 有没有参考或例子说明我怎么做?以上是关于MVC 4 Razor 中的多个单选按钮组的主要内容,如果未能解决你的问题,请参考以下文章
在 WinForms 中对一组单选按钮进行数据绑定的最佳方法
如何在 MVC 中使用 Razor 时取消选中默认单选按钮?
使用 RadioButtonFor 编码一组单选按钮的正确方法