两者都有System.ComponentModel.ReadOnlyAttribute
(System.ComponentModel.DataAnnotations.EditableAttribute
我认为EditableAttribute
是.NET 4)。当为标有其中任何一个的属性创建模型元数据时,您可以看到ModelMetadata.IsReadOnly
将正确设置。
然而,令人沮丧的是,内置的编辑器模板仍然会显示可编辑的字段,即使ModelMetadata.IsReadOnly
是true
.
但是,您可以为希望尊重此元数据属性的每种数据类型创建自己的共享编辑器模板,并专门处理它。
~/Views/Shared/EditorTemplates/String.cshtml
@model String
@if (ViewData.ModelMetadata.IsReadOnly)
{
@Html.Hidden(string.Empty, Model)
}
@(ViewData.ModelMetadata.IsReadOnly ? Html.DisplayText(string.Empty) : Html.TextBox(string.Empty))
查看模型
[Editable(false)]
public string UserReferenceId { get; set; }
您会注意到,如果模型的元数据指示 IsReadOnly,我会绘制一个隐藏字段。这样该属性的值就会在帖子中保持不变。
如果您根本不希望该字段显示,而是在帖子中保留,您可以使用System.Web.Mvc.HiddenInputAttribute
. 在这种情况下,只绘制隐藏的。
[HiddenInput(DisplayValue=false)]
public string UserReferenceId { get; set; }