との両方がありSystem.ComponentModel.ReadOnlyAttribute
ます( .NET 4System.ComponentModel.DataAnnotations.EditableAttribute
だと思います)。これらのいずれかでマークされたプロパティのモデル メタデータが作成されると、正しく設定されるEditableAttribute
ことがわかります。ModelMetadata.IsReadOnly
ただし、イライラすることに、ビルトイン エディター テンプレートには、ModelMetadata.IsReadOnly
isであっても編集可能なフィールドが表示され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; }