如何在ASP.Net MVC中的EditorTemplates中显示一个RadioButtons组(3)

时间:2011-08-26 13:07:21

标签: asp.net-mvc radio-button mvc-editor-templates

我有一个项目列表,我希望用户能够输入一些值选择一个 但是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; }
}

观点:

@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/>

更新

这就是我想要的:

What I want

这就是我得到的:

what I get

因此,FormModel.SelectedItemId永远不会获得任何单选按钮的值。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

似乎您知道将单选按钮的名称设置为相同是使其工作所必需的。但是,当您使用代码行@Html.RadioButton("SelectedItemId", Model.ItemId)在编辑器模板中执行此操作时,MVC 3将考虑您处于Items和prepend items [n]的编辑器模板中。

这将创建类似name="Items[0].SelectedIndex"的名称。如果不是因为下一个单选按钮是`name =“Items [1] .SelectedIndex”。

解决此问题的一种方法是不使用编辑器模板并改为使用foreach循环。这是一些我能够实现功能的代码。我确认模型绑定适用于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" />
    }

答案 1 :(得分:1)

我遇到了同样的问题,我们用这段代码解决了这个问题。

@Html.RadioButton("", Model.Id, Model.Selected, new { Name = "deliveryMethod" })

您需要显式放置Name属性,因此将使用它来代替EditorFor执行后获得的名称。