Asp.net mvc MVC 3:使用EditorForModel隐藏ID属性

Asp.net mvc MVC 3:使用EditorForModel隐藏ID属性,asp.net-mvc,asp.net-mvc-3,data-annotations,Asp.net Mvc,Asp.net Mvc 3,Data Annotations,我的观点是: @Html.EditorForModel() 这是我的ViewModel: public class CommentForm { public int Id { get; set; } [DisplayName("Kommentar"), DataType(DataType.MultilineText)] public string Comment { get; set; } } 问题是Id在表单中呈现为文本字段。实际上,我只想在表单操作中使用Id。是

我的观点是:

@Html.EditorForModel()
这是我的ViewModel:

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

    [DisplayName("Kommentar"), DataType(DataType.MultilineText)]
    public string Comment { get; set; }
}

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

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

[HiddenInput(DisplayValue = false)]
public int Id { get; set; }
另一种可能是为您的
CommentForm
视图模型编写自定义编辑器模板,并在该模板中包含您想要的任何内容(
~/Views/Shared/EditorTemplates/CommentForm.cshtml
):

@model-CommentForm
@EditorFor(x=>x.Comment)

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

我创建了自己的PreventRenderingAttribute

PreventRenderingAttribute.cs

[AttributeUsage(AttributeTargets.Property)]
public class PreventRenderingAttribute : Attribute, IMetadataAware
{
    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.ShowForDisplay = false;
        metadata.ShowForEdit = false;
    }
}
并以评论的形式

[PreventRendering]
public int Id { get; set; }

标准已将ShowForDisplay和ShowForEdit设置为false

 [System.ComponentModel.DataAnnotations.ScaffoldColumn(false)] 
属性。
因此,您的自定义属性似乎有些过分。

干得好;)我删除我的答案,并投你的一票。如果没有,我们有两个内容相同的答案。我通过创建自己的属性解决了这个问题,但是我在接下来的7个小时内无法回答我的问题:/简言之,我做了如下操作:
 [System.ComponentModel.DataAnnotations.ScaffoldColumn(false)]