我正在研究mvc3。我创建了一个包含两个属性的模型,即名称和 IsSelect 。
在这里。
public class DemoModel
{
public string Name { get; set; }
public bool? IsSelect { get; set; }
}
我正在传递此模型进行查看。
public ActionResult checkbox()
{
DemoModel model = getdemoModel();
return View(model);
}
[HttpPost]
public ActionResult checkbox(DemoModel model)
{
ModelState.Clear();
return View(model);
}
public DemoModel getdemoModel()
{
DemoModel demoModel = new DemoModel();
demoModel.Name = "ABC";
demoModel.IsSelect = null;
return demoModel;
}
这是我的观点。
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>DemoModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.IsSelect)
</div>
<div class="editor-field">
@Html.CheckBoxFor(model => model.IsSelect.Value)
@Html.ValidationMessageFor(model => model.IsSelect)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
当我运行它时,它会给我一个错误,即在@Html.CheckBoxFor(model => model.IsSelect.Value)
行。
Nullable对象必须有值。
但是当我将IsSelect值设置为false
时,它可以正常工作。但它不会返回IsSelect属性的值。它将null值返回给控制器。我认为这是一个非常简单的问题,但我想念一些东西。那么,我如何处理@Html.CheckBoxFor
中的空值?如何将它的值返回给控制器?
答案 0 :(得分:1)
首先,如果您不需要空值,请删除?来自宣言。
然后,将假值传递给IsSelect。
将其绑定到以下视图:
@Html.CheckBoxFor(model=>model.IsSelect)
<强>更新强>
public static T GetValue<T>(object o)
{
T val = default(T);
if (o != null && o != DBNull.Value)
{
val = (T)o;
}
return val;
}
上面的代码片段是一个辅助函数,用于检查值是否为null,如果是,则将其转换为默认值。
从数据库中读取时,请使用以下内容:这将有助于您进行投射:
`bool IsSelect=GetValue<bool>(value)`
希望这会有所帮助..
答案 1 :(得分:0)
复选框不适用于可归零的布尔值,因为它可以存储3个状态。空,虚,实。复选框可以有true或false。
如果你想使用复选框,那么空状态将被牺牲为假
@{
Model.IsSelect=Model.IsSelect??false;
}