我使用的是twitter bootstrap框架,所以为了让EditorFor和DisplayFor方法输出我需要的内容,我为字符串、文本、密码等每种类型创建了自定义模板。对于我的登录页面,我想要一个RememberMe bool,所以像以前一样,我创建了以下模板并放入Boolean.cshtml中:
@model bool
<div class="control-group">
<div class="controls">
<label class="checkbox">
@Html.CheckBoxFor(m => m, new {@class = "checkbox"})
@Html.LabelFor(m => m)
</label>
</div>
</div>
非常简单,但是当我使用:
@Html.EditorFor(m => m.RememberMe)
我得到一个异常,告诉我bassed的值不能为空:
The model item passed into the dictionary is null, but this dictionary requires a non-null model item of type 'System.Boolean'.
我遗漏了什么?看起来应该是直截了当的。模型对象上的字段如下所示:
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
谢谢。
MVC:所以看起来最终的问题是创建一个空的视图模型对象并将其传递给视图,而不是让自己创建一个。
发布于 2013-03-07 03:08:37
我不会那样做的。如果该值可以为空,我将确保您的编辑器模板的模型类型为可空的boolean。因此,您的编辑器模板(在Views\Shared\EditorTemplates\Boolean.cshtml中)将是:
@model Boolean?
@Html.CheckBox("", Model.HasValue && Model.Value)
然后在主视图的剃刀中,你可能会有:
<div class="control-group">
<div class="controls">
<label class="checkbox">
@Html.EditorFor(m => m, new {@class = "checkbox"})
@Html.LabelFor(m => m)
</label>
</div>
</div>
发布于 2013-01-21 12:10:45
阅读到目前为止的响应,我开始想知道模型对象是如何初始化的。这很奇怪,但我找到了答案。希望有人能解释这件怪事。可能是MVC初始化一个模型对象的方式,如果你没有指定一个。
默认的MVC Internet模板具有以下登录操作:
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
这就给出了错误。但是,将其更改为以下内容可以解决此问题:
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
var loginModel = new LoginModel();
ViewBag.ReturnUrl = returnUrl;
return View(loginModel);
}
因此,这回答了如何解决问题的问题,但仍然没有解决原因。会不会是因为MVC以一种不同的方式创建了对象的实例,比如使用反射或其他方式?
发布于 2016-07-30 00:07:18
您可以更改模型,使其接受空值"yes"/"no“
public bool? RememberMe { get; set; }
https://stackoverflow.com/questions/14425994
复制相似问题