MVC 3:使用EditorForModel隐藏ID属性

时间:2011-12-01 09:34:18

标签: 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。是否有一个属性告诉编辑器不要呈现属性Id

3 个答案:

答案 0 :(得分:21)

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

完成
 [System.ComponentModel.DataAnnotations.ScaffoldColumn(false)] 

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

答案 1 :(得分:15)

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

[HiddenInput(DisplayValue = false)]
public int Id { get; set; }

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

@model CommentForm
<div>
    @Html.EditorFor(x => x.Comment)
</div>

答案 2 :(得分:14)

感谢您的贡献,但我并不喜欢他们。

我制作了自己的PreventRenderingAttribute。

<强> PreventRenderingAttribute.cs

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

在CommentForm中

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