C# BeginForm中的Foreach和RadioButtonOnfore()元素中的display元素

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

我正在使用C.NETMVC3 Razor创建一个简单的表单。但在这种形式下,我需要以单选按钮的形式打印列表的内容。但我不确定这是怎么回事:

@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++;
}