如何在 ASP.Net MVC 的 EditorTemplates 中显示一个 RadioButtons 组(3)
Posted
技术标签:
【中文标题】如何在 ASP.Net MVC 的 EditorTemplates 中显示一个 RadioButtons 组(3)【英文标题】:How to have one RadioButtons group display in EditorTemplates in ASP.Net MVC(3) 【发布时间】:2011-11-04 12:39:27 【问题描述】:我有一个项目列表,我希望用户能够从中输入一些值选择一个 但是 EditorTemplate 生成的单选按钮被命名为“Item[x].SelectedItemId”,因此它们完全相互独立,我无法获取值...
让我们展示一些代码。 型号:
public class FormModel
public List<ItemModel> Items get; set;
public int SelectedItemId get; set;
public class ItemModel
public int ItemId get; set;
public string ItemName get; set;
public string SomeString get; set;
观点:
@model FormModel
@using (html.BeginForm())
@Html.EditorFor(m => m.Items)
编辑器模板:
@model ItemModel
@Html.RadioButton("SelectedItemId", Model.ItemId)
@Model.ItemName <br/>
@Html.TextBoxFor(m => m.SomeString) <br/>
更新
这就是我想要的:
这是我得到的:
因此,FormModel.SelectedItemId 永远不会获得任何单选按钮的值。
我做错了什么?
【问题讨论】:
MVC 模型绑定旨在立即正确处理集合。您能否提供 POST 控制器操作的示例,以便我们了解您是如何尝试访问这些值的?还是您需要渲染的 HTML 以允许最终用户只为列表中的一项选择单选按钮? @ron.defreitas:这就是重点,我需要用户能够选择列表中仅一项的单选按钮。 【参考方案1】:您似乎知道将单选按钮的名称设置为相同是使它们正常工作所必需的。但是,当您在编辑器模板中使用代码行 @Html.RadioButton("SelectedItemId", Model.ItemId)
执行此操作时,MVC 3 将考虑到您处于 Items 的编辑器模板中并预先添加 items[n]。
这将创建一个类似name="Items[0].SelectedIndex"
的名称。如果不是因为下一个单选按钮会是 `name="Items[1].SelectedIndex",这会很好。
解决此问题的一种方法是不使用编辑器模板,而是使用foreach
循环。这是一些我能够发挥作用的代码。我确认模型绑定适用于SelectedIndex
。
@model FormModel
@
ViewBag.Title = "Index";
@using (Html.BeginForm())
foreach (var item in Model.Items)
@Html.RadioButtonFor(x => x.SelectedItemId, item.ItemId)
@item.ItemName <br/>
@Html.TextBoxFor(m => item.ItemName) <br/>
<input type="submit" value = "submit" />
【讨论】:
【参考方案2】:我遇到了同样的问题,我们用这段代码解决了。
@Html.RadioButton("", Model.Id, Model.Selected, new Name = "deliveryMethod" )
您需要显式放置 Name 属性,因此它将使用您在 EditorFor
执行后获得的名称。
【讨论】:
我要补充一点,如果你离开第一个参数“”,你会得到一个运行时错误。如果你正在遍历一个列表,你可以把 "deliveryMethod" + i, 作为第一个参数。以上是关于如何在 ASP.Net MVC 的 EditorTemplates 中显示一个 RadioButtons 组(3)的主要内容,如果未能解决你的问题,请参考以下文章