将Nullable Bool渲染为CheckBox

Jon*_*ood 7 asp.net-mvc asp.net-mvc-3

我是WebForms到MVC的新手.我有类型的视图模型字段bool?,默认情况下,EditorFor()将此字段呈现为具有"未设置"选项的DropDownList.我更喜欢将其渲染为CheckBox,如果值为null,则将其设置为未选中.

字段名称是RFP.DatesFlexible,因此我在视图中编写了以下标记:

<input type="checkbox" id="RFP_DatesFlexible" name="RFP.DatesFlexible" />
<label for="RFP_DatesFlexible">My Dates are Flexible</label>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.结果始终为null并且ModelState.IsValid为false.

谁能说我怎么能做这个工作?

编辑

这是我最终得到的代码,似乎工作正常.

@Html.CheckBox("RFP.DatesFlexible", Model.RFP.DatesFlexible ?? false)
@Html.Label("RFP.DatesFlexible", "My Dates are Flexible")
Run Code Online (Sandbox Code Playgroud)

标签与复选框正确关联,以便单击文本将切换复选框.

haw*_*kke 5

像这样的东西?

楷模:

public class MyViewModel
{
    public ViewModel2 RDP { get; set; }
}

public class ViewModel2
{
    public bool? DatesFlexible { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

    public ActionResult TestBool()
    {
        return View(new MyViewModel { RDP = new ViewModel2() });
    }

    [HttpPost]
    public ActionResult TestBool(MyViewModel vm)
    {
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

视图:

@model mvc_testing_2.Models.MyViewModel

@using (Html.BeginForm())
{
    @Html.CheckBox("RDP.DatesFlexible", 
        Model.RDP.DatesFlexible != null && (bool)Model.RDP.DatesFlexible)

    <input type="submit" value="go" />
}
Run Code Online (Sandbox Code Playgroud)