首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于bool (剃刀)的MVC 4自定义模板

用于bool (剃刀)的MVC 4自定义模板
EN

Stack Overflow用户
提问于 2013-01-20 23:22:28
回答 3查看 20.8K关注 0票数 16

我使用的是twitter bootstrap框架,所以为了让EditorFor和DisplayFor方法输出我需要的内容,我为字符串、文本、密码等每种类型创建了自定义模板。对于我的登录页面,我想要一个RememberMe bool,所以像以前一样,我创建了以下模板并放入Boolean.cshtml中:

代码语言:javascript
复制
@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>

非常简单,但是当我使用:

代码语言:javascript
复制
@Html.EditorFor(m => m.RememberMe)

我得到一个异常,告诉我bassed的值不能为空:

代码语言:javascript
复制
The model item passed into the dictionary is null, but this dictionary requires a non-null model item of type 'System.Boolean'.

我遗漏了什么?看起来应该是直截了当的。模型对象上的字段如下所示:

代码语言:javascript
复制
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }

谢谢。

MVC:所以看起来最终的问题是创建一个空的视图模型对象并将其传递给视图,而不是让自己创建一个。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-07 03:08:37

我不会那样做的。如果该值可以为空,我将确保您的编辑器模板的模型类型为可空的boolean。因此,您的编辑器模板(在Views\Shared\EditorTemplates\Boolean.cshtml中)将是:

代码语言:javascript
复制
@model Boolean?

@Html.CheckBox("", Model.HasValue && Model.Value)

然后在主视图的剃刀中,你可能会有:

代码语言:javascript
复制
<div class="control-group">
    <div class="controls">
        <label class="checkbox">
            @Html.EditorFor(m => m, new {@class = "checkbox"})
            @Html.LabelFor(m => m)
        </label>
    </div>
</div>
票数 18
EN

Stack Overflow用户

发布于 2013-01-21 12:10:45

阅读到目前为止的响应,我开始想知道模型对象是如何初始化的。这很奇怪,但我找到了答案。希望有人能解释这件怪事。可能是MVC初始化一个模型对象的方式,如果你没有指定一个。

默认的MVC Internet模板具有以下登录操作:

代码语言:javascript
复制
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;

    return View();
}

这就给出了错误。但是,将其更改为以下内容可以解决此问题:

代码语言:javascript
复制
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    var loginModel = new LoginModel();

    ViewBag.ReturnUrl = returnUrl;

    return View(loginModel);
}

因此,这回答了如何解决问题的问题,但仍然没有解决原因。会不会是因为MVC以一种不同的方式创建了对象的实例,比如使用反射或其他方式?

票数 0
EN

Stack Overflow用户

发布于 2016-07-30 00:07:18

您可以更改模型,使其接受空值"yes"/"no“

代码语言:javascript
复制
public bool? RememberMe { get; set; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14425994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档