关于asp.net mvc:在Razor中呈现CheckBox时,可为空的对象必须具有一个值

Nullable object must have a value While rendering a CheckBox in Razor

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

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

但显示错误无法隐式转换"布尔"?来"布尔"。您是否缺少类型转换。
为了解决这个问题,我使用了@Html.CheckBoxFor(m => m.PDModel.EducationMasterList[0].eduMarksheet.Value, new { @class ="marksheet" }),并且给出了此错误:可为空的对象必须具有一个值。

@Html.CheckBoxFor(m => m.PDModel.EducationMasterList[0].eduMarksheet.GetValueOrDefault(), new { @class ="marksheet" })并给出此错误:模板只能与字段访问,属性访问,一维数组索引或单参数自定义索引器表达式一起使用。

任何建议都会感激不尽。

感谢Adavance


您不能为可为null的布尔创建复选框。复选框具有2个状态,分别为checked/trueunchecked/false,但可为空的布尔型具有3个状态,分别为truefalsenull,因此无法回传指示其false还是false的值。 null

您可以使用

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

这将呈现一个包含3个值(" True "," False "和" Not set ")的下拉列表。另一种选择是创建3个单选按钮。

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