假设我的模型中有以下属性,我想要互相排斥:
public bool PrintWeek1 {get; set;}
public bool PrintWeek2 {get; set;}
public bool PrintWeek3 {get; set;}
是否可以将它们渲染为一组单选按钮,还是需要将它们更改为枚举?
如果我使用@Html.RadioButtonFor
,则会将name作为属性的名称,因此它们的分组不正确。
答案 0 :(得分:5)
这是一个快速解决方案,让您在模型中具有以下属性 -
public bool PrintWeek1 { get; set; }
public bool PrintWeek2 { get; set; }
public bool PrintWeek3 { get; set; }
public string SelectedValue { get; set; }
然后你的HTML应该是这样的 -
@Html.RadioButtonFor(Model => Model.PrintWeek1, "PrintWeek1", new { @Name = "SelectedValue" })
@Html.RadioButtonFor(Model => Model.PrintWeek2, "PrintWeek2", new { @Name = "SelectedValue" })
@Html.RadioButtonFor(Model => Model.PrintWeek3, "PrintWeek3", new { @Name = "SelectedValue" })
然后,当您提交表单时,您将在SelectedValue
属性中获取所选值。
修改强> 要解决@StephenMuecke点,创建了以下解决方案 -
创建enum
-
public enum PrintWeekType
{
PrintWeek1, PrintWeek2, PrintWeek3
}
然后有一个模型属性(而不是单个属性,具有单个emum属性) -
public PrintWeekType SelectedValue { get; set; }
HTML应如下所示 -
@Html.RadioButtonFor(m => m.SelectedValue, PrintWeekType.PrintWeek1)
@Html.RadioButtonFor(m => m.SelectedValue, PrintWeekType.PrintWeek2)
@Html.RadioButtonFor(m => m.SelectedValue, PrintWeekType.PrintWeek3)
使用上面的示例,可以预先选择一个单选按钮,同时我们可以在SelectedValue
属性中发布所选的值。
答案 1 :(得分:0)
好的,我放弃了bool,最后使用了一个列表 - 这似乎是最快捷,最简单的方法。
我初始化模型的地方:
public PrintViewModel()
{
this.PrintTypes = new List<string>() { "Print Week 1", "Print Week 2", "Print Week 3" };
}
public List<string> PrintTypes { get; set; }
public string SelectedPrintType { get; set; }
在我看来(我希望默认选择第一个选项):
@for(int i = 0; i < Model.PrintTypes.Count; i++)
{
<div class="row">
<div class="col-md-2">
@(i == 0 ? Html.RadioButtonFor(x => x.SelectedPrintType, Model.PrintTypes[i], new {@checked = "checked"}) : @Html.RadioButtonFor(x => x.SelectedPrintType, Model.PrintTypes[i]))
<label for="@Model.PrintTypes[i]">@Model.PrintTypes[i]</label>
</div>
</div>
}