我有一个项目列表,我希望用户能够从中输入一些值,选择一个 但是 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; }
}
View :
@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 永远不会获取任何单选按钮的值。
我做错了什么?
最佳答案
看来您知道必须将单选按钮的名称设置为相同才能使其正常工作。但是,当您在编辑器模板中使用代码行 @Html.RadioButton("SelectedItemId", Model.ItemId)
执行此操作时,MVC 3 将考虑您位于编辑器模板中对于项目和前置项目[n]。
这将创建一个类似于 name="Items[0].SelectedIndex"
的名称。如果不是因为下一个单选按钮是 `name="Items[1].SelectedIndex",那就没问题了。
解决此问题的一种方法是不使用编辑器模板并使用 foreach
循环。这是我能够运行的一些代码。我确认模型绑定(bind)适用于 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" />
}
关于asp.net-mvc - 如何在 ASP.Net MVC 的 EditorTemplates 中显示一个 RadioButtons 组(3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205090/