C# BeginForm中的Foreach和RadioButtonOnfore()元素中的display元素
我正在使用C.NETMVC3 Razor创建一个简单的表单。但在这种形式下,我需要以单选按钮的形式打印列表的内容。但我不确定这是怎么回事:C# BeginForm中的Foreach和RadioButtonOnfore()元素中的display元素,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,我正在使用C.NETMVC3 Razor创建一个简单的表单。但在这种形式下,我需要以单选按钮的形式打印列表的内容。但我不确定这是怎么回事: @using(Html.BeginForm("Method", "Controller", FormMethod.Post)) { foreach (Items item in Model.Items) { <div> @Html.RadioButtonFor(item->itemId
@using(Html.BeginForm("Method", "Controller", FormMethod.Post))
{
foreach (Items item in Model.Items)
{
<div>
@Html.RadioButtonFor(item->itemId)
@Html.LabelFor(item->description)
</div>
}
}
但这不起作用
我可能可以使用普通的html标记来创建单选按钮。但是数据不会自动保存在右边
我如何才能做到这一点?语法有点不同:
@Html.RadioButtonFor(model => item.ItemId)
@Html.LabelFor(model => item.Description)
其他一切看起来都很好
哇,我一定累了。是的,下面的看起来不错,但只是为了展示。检查Darin对编辑器模板的回答
[EDIT2]从这个问题上看不太明显,但从您的评论来看,foreach中的项似乎是另一个可枚举项。然后嵌套foreach循环,以显示属性:
@foreach(var itemList in Model.Items)
{
foreach(var item in itemList)
{
<div>
@Html.RadioButtonFor(model => item.ItemId)
@Html.LabelFor(model => item.Description)
<div>
}
}
是这样吗?我仍然不确定我是否理解正确 我建议您使用编辑器模板,而不是编写那些循环:
@model MyViewModel
@using(Html.BeginForm("Method", "Controller", FormMethod.Post))
{
@Html.EditorFor(x => x.Items)
}
现在定义一个相应的编辑器模板,该模板将自动为模型的每个元素呈现~/Views/Shared/EditorTemplates/ItemViewModel.cshtml:
请注意,除了选择相应视图模型属性的lambda表达式外,还必须向Html.radiobuttononhelper传递第二个参数。此参数表示如果用户在提交表单时选中此单选按钮,将发送到服务器并绑定到相应属性的值
还请注意,这是按惯例进行的。如果我们假设主视图模型中的Items属性是IEnumerable类型,那么您必须定义并将为此集合的每个元素呈现的相应编辑器模板是~/Views/Shared/EditorTemplates/ItemViewModel.cshtml或~/Views/CurrentController/EditorTemplates/ItemViewModel.cshtml(如果不需要)此模板将在多个控制器之间共享。因为您在foreach循环中。以下步骤将起作用
foreach (Items item in Model.Items)
{
<div>
@Html.RadioButtonFor(item.itemId)
@Html.LabelFor(item.description)
</div>
}
如果您想保存它们,您需要实现基于零索引的解决方案,如下所示
@{int i = 0}
foreach (Items item in Model.Items)
{
<div>
@Html.RadioButtonFor(model =>model[i].itemId)
@Html.LabelFor(model =>model[i].description)
</div>
i++;
}
我知道,但这一次我陷入了困境。我的模型有一个IEnumerable列表,我将在foreach循环中处理它。我需要在单选按钮中显示IEnumerable中找到的每个项目的数据。有什么想法吗?假设循环中的每个项都是一个具有ItemId和Description的类,您的版本(语法已更正)应该可以。@archil不允许像这样直接分配“item->property”。通常我会使用model=>model.Property,但现在我在foreach循环中,需要来自“item”的数据。现在它给了我一个错误:方法“RadioButtonFor”没有重载,只接受1个参数
@{int i = 0}
foreach (Items item in Model.Items)
{
<div>
@Html.RadioButtonFor(model =>model[i].itemId)
@Html.LabelFor(model =>model[i].description)
</div>
i++;
}