我的视图模型如下:
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/>
}
}
我希望在发布表单(模型绑定)时,我的单选按钮选择应该保留在模型中。如果有人在我的代码中指出问题,我将不胜感激。
答案 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
,则会预先选择第二个单选按钮。
这又取决于你想要达到的目标以及你的模型所具有的价值。