为模型中的每一行选择MVC剃刀部分视图单选按钮

本文关键字:MVC 选择 一行 剃刀部 单选按钮 视图 模型 | 更新日期: 2023-09-27 18:09:34

我有一个显示包含4个数据列的视图模型列表的部分视图。我想让用户选择1行,并按下按钮POST动作。视图模型如下所示:

public class ViewModelSelection
{
    public long SelectedItem { get; set; }
    public List<ViewModelFromDB> Choices { get; set; }
}

局部视图如下:

@model MyApp.ViewModels.ViewModelSelection
<h4>Title</h4>
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    <table>
        <tr>
            <th></th>
            <th>Name</th>
            <th>MeasureA</th>
            <th>MeasureB</th>
        </tr>
        @foreach (var item in Model.Choices)
        {
            <tr>
                <td>
                    @Html.RadioButton(item.id, Model.SelectedItem)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.measureA)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.measureB)
                </td>
            </tr>
        }
    </table>
    <input type="submit" value="Save" class="" />
}

我希望将视图模型的SelectedItem属性设置为所选行的id字段。

为模型中的每一行选择MVC剃刀部分视图单选按钮

您创建具有不同名称的单选按钮,因此它们是未分组的(即您可以选择所有它们),并且与您的模型没有关系。将单选按钮更改为

@Html.RadioButtonFor(m => m.SelectedItem, item.id, new { id = "" })

如果您随后将此发送到带有参数int selectedItem的控制器方法,则selectedItem将包含所选Choice的ID。或者,您的参数可以是ViewModelSelection model,在这种情况下,model.SelectedItem将包含该值。

旁注:new { id = "" }删除输入id属性,以确保您有有效的html(没有重复的id属性)