RadiobuttonFor不适用于集合内的财产(ASP.Net MVC3)

时间:2012-05-08 13:31:31

标签: html asp.net-mvc-3 view html-helper

我的视图模型如下:

public class ShippingInfo
{
    public string DiagID { get; set; }

    public Collection<AddressInfo> AddressSuggestions { get; set; }
}


public class AddressInfo
{
    public int ID { get; set; }
    public string CompleteAddressInfo { get; set; }
}

当我尝试在按钮单击时发布表单时,单选按钮选择不会保留在我的操作方法中。

我是否需要使用另一个变量来存储选择,就像下拉列表一样?

@if (Model.AddressSuggestions != null)
    {
    for (int i = 0; i < Model.AddressSuggestions.Count; i++)
    {
        AddressInfo m1 = Model.AddressSuggestions[i];
        @Html.RadioButtonFor(m => m1.CompleteAddressInfo, m1.ID)
        <span>@Model.AddressSuggestions[i].CompleteAddressInfo</span>
        <br/>
    }
    }

我希望在发布表单(模型绑定)时,我的单选按钮选择应该保留在模型中。如果有人在我的代码中指出问题,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

@帮助电话前使用Html.RadioButtonFor,否则您不会向视图输出任何内容。还要在这个帮助程序调用结束时删除;

@if (Model.AddressSuggestions != null)
{
    for (int i = 0; i < Model.AddressSuggestions.Count; i++)
    {
        @Html.RadioButtonFor(
            m => m.AddressSuggestions[i].CompleteAddressInfo, 
            Model.AddressSuggestions[i].CompleteAddressInfo
        )
    }
}

此外,我不知道你对false参数意味着什么,但是这个帮助器没有重载需要一个布尔值。助手的第二个参数表示如果相应的模型属性值匹配,将使单选按钮被检查的值。

因此,例如,如果您希望每行有2个互斥的单选按钮:

for (int i = 0; i < Model.AddressSuggestions.Count; i++)
{
    <span>Value 1</span>
    @Html.RadioButtonFor(
        m => m.AddressSuggestions[i].CompleteAddressInfo, 
        "value1"
    )

    <span>Value 2</span>
    @Html.RadioButtonFor(
        m => m.AddressSuggestions[i].CompleteAddressInfo, 
        "value2"
    )
}

现在,如果Model.AddressSuggestions[i].CompleteAddressInfo等于value1,则会预先选择第一个单选按钮,如果等于value2,则会预先选择第二个单选按钮。

这又取决于你想要达到的目标以及你的模型所具有的价值。