MVC 3: скрыть свойство ID с помощью EditorForModel - PullRequest
4 голосов
/ 01 декабря 2011

У меня есть эта строка в моем представлении:

@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 ]

21 голосов
/ 12 июня 2012

Установка для ShowForDisplay и ShowForEdit значения false уже выполнена стандартом

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

атрибут. Поэтому ваш пользовательский атрибут выглядит излишним.

15 голосов
/ 01 декабря 2011

Одна из возможностей - сделать его скрытым полем:

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

Другая возможность - написать собственный шаблон редактора для вашей CommentForm модели представления, и внутри этого шаблона есть все, что вы хотите (~/Views/Shared/EditorTemplates/CommentForm.cshtml):

@model CommentForm
<div>
    @Html.EditorFor(x => x.Comment)
</div>
14 голосов
/ 02 декабря 2011

Спасибо за ваш вклад, но мне он не очень понравился.

Я сделал свой собственный 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; }
...