我的观点中有这一行:
@Html.EditorForModel()
这是我的ViewModel:
public class CommentForm
{
public int Id { get; set; }
[DisplayName("Kommentar"), DataType(DataType.MultilineText)]
public string Comment { get; set; }
}
问题是Id
呈现为表单中的文本字段。实际上,我只想在表单操作中使用Id
。是否有一个属性告诉编辑器不要呈现属性Id
?
答案 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; }