【问题标题】:ASP.NET MVC: Using EditorFor() with a default template for enumsASP.NET MVC:将 EditorFor() 与枚举的默认模板一起使用
【发布时间】:2011-04-16 01:05:55
【问题描述】:

我编写了一个 EnumDropDownFor() 助手,我想将它与 EditorFor() 一起使用。我才刚刚开始使用 EditorFor(),所以对如何选择模板有点困惑。

我的 Enum.cshtml 编辑器模板如下:

<div class="editor-label">
    @Html.LabelFor(m => m)
</div>
<div class="editor-field">     
    @Html.EnumDropDownListFor(m => m)
    @Html.ValidationMessageFor(m => m)
</div>

没有明确定义要使用的模板,是否有任何方法可以在将 Enum 传递给 EditorFor() 时使用默认模板?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 editorfor mvc-editor-templates


    【解决方案1】:

    您可以查看 Brad Wilson 关于 ASP.NET MVC 中使用的 default templates 的博客文章。当您拥有 Enum 类型的模型属性时,它就是正在呈现的字符串模板。所以你可以像这样自定义这个字符串编辑器模板:

    ~/Views/Shared/EditorTemplates/String.cshtml:

    @model object
    @if (Model is Enum)
    {
        <div class="editor-label">
            @Html.LabelFor(m => m)
        </div>
        <div class="editor-field">     
            @Html.EnumDropDownListFor(m => m)
            @Html.ValidationMessageFor(m => m)
        </div>
    }
    else
    {
        @Html.TextBox(
            "",
            ViewData.TemplateInfo.FormattedModelValue,
            new { @class = "text-box single-line" }
        )
    }
    

    然后在你看来很简单:

    @Html.EditorFor(x => x.SomeEnumProperty)
    

    【讨论】:

    • 太棒了!读过那篇文章,但没有意识到默认情况下会使用该字符串。如果它不能匹配其他任何东西,这是使用的模板吗?
    • 无法让它工作,因为 @if(Model is Enum) 总是返回 false,因为 Model 总是为空! ..我错过了什么!! ...非常感谢。
    • 应该使用 @if(ViewData.ModelMetadata.ModelType.IsEnum) 而不是检查实例,以便正确提取空标签。
    • 嗯,我的意思是说ViewData.ModelMetadata.ModelType,因为如果它可以为空,IsEnum 将返回 false,所以你必须检查底层类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2014-10-23
    • 2013-12-19
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多