0

我正在使用 C#.NET MVC3 (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 标签来创建单选按钮。但是数据不会自动保存在右边吗?

我怎样才能使这项工作?

4

3 回答 3

6

我建议您使用编辑器模板而不是编写这些循环:

@model MyViewModel
@using(Html.BeginForm("Method", "Controller", FormMethod.Post))
{
    @Html.EditorFor(x => x.Items)
}

现在定义一个相应的编辑器模板,该模板将自动为模型的每个元素(~/Views/Shared/EditorTemplates/ItemViewModel.cshtml)呈现:

@model ItemViewModel
<div>
    @Html.RadioButtonFor(x => x.itemId, "1")
    @Html.LabelFor(x => x.description)
</div>

Html.RadioButtonFor请注意,除了选择相应视图模型属性的 lambda 表达式之外,您还必须将第二个参数传递给帮助程序。如果用户在提交表单时选中此单选按钮,此参数表示将发送到服务器并绑定到相应属性的值。

另请注意,这是按惯例工作的。如果我们假设您的主视图模型中的 Items 属性是类型IEnumerable<ItemViewModel>,那么您必须定义并且将为该集合的每个元素呈现的相应编辑器模板是,~/Views/Shared/EditorTemplates/ItemViewModel.cshtml或者~/Views/CurrentController/EditorTemplates/ItemViewModel.cshtml如果您不希望该模板在多个之间共享控制器。

于 2012-05-08T13:43:38.447 回答
2

当您在 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++;
}
于 2012-05-08T13:52:16.727 回答
0

语法有点不同:

@Html.RadioButtonFor(model => item.ItemId)
@Html.LabelFor(model => item.Description)

其他一切看起来都很好。

[编辑] 哇,我一定很累。是的,以下看起来不错,但仅用于display。检查 Darin 对编辑器模板的回答。

[EDIT2] 从这个问题来看并不是很明显,但从你的评论看来,itemforeach 中的 the 是另一个 Enumerable。然后嵌套 foreach 循环,以显示属性:

@foreach(var itemList in Model.Items)
{
    foreach(var item in itemList)
    {
        <div>
            @Html.RadioButtonFor(model => item.ItemId)
            @Html.LabelFor(model => item.Description)
        <div>
    }
}

这样吗?我仍然不确定我是否理解正确。:)

于 2012-05-08T13:38:37.400 回答