1

我的视图模型看起来像:

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

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

4

1 回答 1

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,则预选第二个单选按钮。

再一次,这将取决于您要实现的目标以及您的模型所持有的价值。

于 2012-05-08T13:35:08.670 回答