在Razor中呈现CheckBox时,Nullable对象必须具有值

时间:2014-10-25 08:07:06

标签: asp.net-mvc razor

我正在尝试使用Razor在MVC中创建一个CheckBox,下面是代码:

@Html.CheckBoxFor(m => m.PDModel.EducationMasterList[0].eduMarksheet, new { @class = "marksheet" })

但它显示错误无法隐式转换'bool?' 'bool'。你是否错过了类型。 为了解决这个问题,我使用了@Html.CheckBoxFor(m => m.PDModel.EducationMasterList[0].eduMarksheet.Value, new { @class = "marksheet" })并且它给出了这个错误: Nullable对象必须有一个值。

@Html.CheckBoxFor(m => m.PDModel.EducationMasterList[0].eduMarksheet.GetValueOrDefault(), new { @class = "marksheet" })并且它提供了此错误:模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。 < / p>

任何建议都会感激不尽。

感谢Adavance

1 个答案:

答案 0 :(得分:1)

您无法为可空的bool创建复选框。复选框有2个状态,checked/trueunchecked/false,但可以为空的bool有3个状态truefalsenull,因此无法发布返回一个值,表明其falsenull

您可以使用

@Html.EditorFor(m => m.PDModel.EducationMasterList[0].eduMarksheet, ...

将呈现包含3个值的下拉列表(&#34; True&#34;,&#34; False&#34;&#34;未设置&#34;)。另一种选择是创建3个单选按钮。

请注意,@Html.CheckBoxFor(m => m.PDModel.EducationMasterList[0].eduMarksheet.Value, ..)没有意义,因为它会创建一个复选框并使用属性name="EducationMasterList[0].eduMarksheet.Value"关联隐藏输入,因此当它回发时它将不匹配任何模型属性,绑定将失败。