4

我正在尝试使用以下代码定义一个 Boolean.cshtml 以与 EditorFor 一起使用:

@{
   var o = ViewData.ModelMetadata;
}

<div class="editor-for">
    @Html.CheckBox(o.PropertyName,
                   ViewData.Model,
                   new { @class="tickbox-single-line" })
</div>

不幸的是,模型为空,我收到以下非描述性错误:

CS1973:“System.Web.Mvc.HtmlHelper”没有名为“CheckBox”的适用方法,但似乎具有该名称的扩展方法。扩展方法不能动态调度。考虑强制转换动态参数或在没有扩展方法语法的情况下调用扩展方法。

阅读本文后,我尝试了以下方法:

@Html.CheckBox(o.PropertyName,
               ViewData.Model ?? false,
               new { @class="tickbox-single-line" })

但我得到完全相同的错误。查看代码很简单:

@Html.EditorFor(m => m.RememberMe)

我在 Boolean.cshtml 中做错了什么?

4

2 回答 2

8

不确定这是最好的方法,但我认为你只是有一个问题ViewData.Model,即(如果我没记错的话),动态有问题的事情。

所以...投吧!

@{
   var o = ViewData.ModelMetadata;
   bool model = (bool)ViewData.Model;
}

<div class="editor-for">
    @Html.CheckBox(o.PropertyName,
                   model,
                   new { @class="tickbox-single-line" })
</div>

但如果我没记错的话,EditorTemplate宁愿看起来像

@model bool

<div class="editor-for">
   @Html.CheckBox("", Model, new{@class="tickbox-single-line"})
<div>
于 2012-10-19T14:55:59.667 回答
3

这有点晚了,但您也可以使用 CheckBoxFor 来简化它。

我的 EditorTemplate 很简单:

@model bool

@Html.CheckBoxFor(m => m)
于 2013-03-06T17:54:56.323 回答