MVC 3:使用EditorForModel隐藏ID属性

Bri*_*get 4 asp.net-mvc data-annotations asp.net-mvc-3

我在我的视图中有这一行:

@Html.EditorForModel()
Run Code Online (Sandbox Code Playgroud)

这是我的ViewModel:

public class CommentForm
{
    public int Id { get; set; }

    [DisplayName("Kommentar"), DataType(DataType.MultilineText)]
    public string Comment { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

问题是Id在表单中呈现为文本字段.实际上,我只想Id在表单中使用动作.是否有一个属性告诉编辑器不要呈现属性Id

Geo*_*der 21

将ShowForDisplay和ShowForEdit设置为false已由标准完成

 [System.ComponentModel.DataAnnotations.ScaffoldColumn(false)] 
Run Code Online (Sandbox Code Playgroud)

属性.因此,您的自定义属性似乎有点矫枉过正.


Dar*_*rov 15

一种可能性是将其渲染为隐藏字段:

[HiddenInput(DisplayValue = false)]
public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

另一种可能性是为您的CommentForm视图模型编写自定义编辑器模板,并在此模板中包含您想要的任何内容(~/Views/Shared/EditorTemplates/CommentForm.cshtml):

@model CommentForm
<div>
    @Html.EditorFor(x => x.Comment)
</div>
Run Code Online (Sandbox Code Playgroud)

  • 好工作;)我删除了我的答案,并赞成你的.如果没有,我们有两个相同内容的答案. (5认同)

Bri*_*get 14

谢谢你的贡献,但我真的不喜欢他们.

我制作了自己的PreventRenderingAttribute.

PreventRenderingAttribute.cs

[AttributeUsage(AttributeTargets.Property)]
public class PreventRenderingAttribute : Attribute, IMetadataAware
{
    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.ShowForDisplay = false;
        metadata.ShowForEdit = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在CommentForm中

[PreventRendering]
public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)