【问题标题】:How to create an Editor Template for Boolean? (.EditorFor<>)如何为布尔创建编辑器模板? (.EditorFor<>)
【发布时间】:2012-10-19 14:49:11
【问题描述】:

我正在尝试使用以下代码定义一个 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 中做错了什么?

【问题讨论】:

    标签: .net asp.net-mvc razor


    【解决方案1】:

    不确定这是不是最好的方法,但我认为您只是对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>
    

    【讨论】:

    • 我对你的第二个 sn-p 感到困惑。 @model bool 有什么作用?
    • @LuisFerrao 好吧,这只是 bool 的编辑器模板的常见演示
    • 这并不能真正告诉我它的作用,但我想此时我应该只是 RTFM。无论如何,这是可行的,所以我将其标记为答案。
    • @LuisFerrao 它就像任何视图中的任何模型一样。在这种情况下,模型是... bool
    • 我明白了!不过很奇怪,我为字符串编辑器模板尝试了相同的语法:“@model string”,然后像您为复选框所做的那样将“Model”作为值提供,并且我在文本框中输入的任何文本都不会反馈给模型。
    【解决方案2】:

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

    我的 EditorTemplate 很简单:

    @model bool
    
    @Html.CheckBoxFor(m => m)
    

    【讨论】:

    • 我试过了 - 没用。错误是:传入字典的模型项为空,但此字典需要“System.Boolean”类型的非空模型项。
    • 如果传递的模型项为空,那么这不是布尔值 - 它是可空的布尔值。相反,使用@model bool? @Html.CheckBoxFor(m => m)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多