【问题标题】:How to get rid of default label in EditorForModel如何摆脱 EditorForModel 中的默认标签
【发布时间】:2017-04-30 20:08:43
【问题描述】:

我有一个正在处理的 ASP.Net MVC 项目,并且我有一个模型,我想将其转换为我的表单。我想为此使用EditorForModel(),因为如果我决定稍后向模型添加/删除属性,我希望它自动向表单添加字段。

我遇到的问题是模型编辑器获取每个属性并创建以下 HTML:(这只是通用的。不是实际代码)

<div class="editor-label"><label>Label Title</label></div>
<div class="editor-field"><input type="type"/></div

但是我希望它为每个字段做的事情是这样的:

<div class="editor-field">
    <label>Label Title</label>
    <input type="type"/>
</div>

但如果我尝试在编辑器模板中执行此操作,我会得到这个:

<div class="editor-label"><label>Label Title</label></div>
<div class="editor-field">
    <label>Label Title</label>
    <input type="type"/>
</div>

我怎样才能让EditorForModel() 不让它成为自己的标签字段?我知道我总是可以将它设置为隐藏在 CSS 中,但如果它甚至不存在就更好了,这样我就可以限制代码混乱。

提前致谢。

PS:我也尝试过使用[HiddenInput(DisplayValue = false)],但这只是隐藏了整个字段,而不仅仅是标签。

【问题讨论】:

    标签: c# asp.net asp.net-mvc editorfor editorformodel


    【解决方案1】:

    您需要在您的编辑器模板 cshtml 中编写它以使其按预期工作:

    @foreach (var property in ViewData.ModelMetadata.Properties)
    {
        <div class="editor-field">
            <label>@property.GetDisplayName()</label>
            @Html.Editor(property.PropertyName)
        </div>
    }
    

    【讨论】:

    • 我把它放在一个 string.cshtml 中,它做了一件非常奇怪的事情,它在每个字符串属性中运行了多次。它是否需要进入它自己的模型编辑器模板而不是类型编辑器模板。例如,我的模型有 4 个字符串属性和 2 个整数属性。这段代码是放在 ModelName.cshtml 还是 String.cshtml 中?
    • 如果你有一个特定的模型然后创建模型[TypeName].chstml编辑器模板。如果它是通用的,则在同一文件夹中创建 Object.cshtml 模板。在您看来,您应该只调用@Html.EditorForModel() 来完成它。
    • 模板必须在EditorTemplates文件夹中。
    • 真正快速的问题与此无关。如果我需要检查编辑器模板中是否需要某个属性,我知道我可以使用 property.IsRequired。但这对于值类型返回 true。有没有办法检查 Value 类型是否已按要求设置?
    猜你喜欢
    • 2014-05-08
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多