Подтвердить что ты не робот

Render LabelFor без маркировки меток из класса DataAnnotation

У меня есть следующий код

<div class="editor-label">
    @Html.LabelFor(model => model.subCategoryName)
</div>

который отображает html как

<div class="editor-label">
   <label for="subCategoryName">Sub-Category Name</label>
</div>

Как сделать чистый HTML без <label>, но все же получить значение из ViewModel DataAnnotations, например:

    [Display(Name = "Sub-Category Name")]
    public string subCategoryName { get; set; }

<div class="editor-label">
   Sub-Category Name
</div

Я пробовал практически все методы для @Html.XXXXXX(.DisplayTextFor,.DisplayNameFor и т.д.) - и все еще не могу заставить его работать.

4b9b3361

Ответ 1

Выводы и исправить: После долгих поисков я нашел решение. Моя DataAnnotation не была правильно отформатирована:

    [Required]
    [DisplayName("Sub-Category Name")]
    public string subCategoryName { get; set; } 

не

    [Required]
    [Display(Name = "Sub-Category Name")]
    public string subCategoryName { get; set; } 

2 - Я использовал следующий код RAZOR:

@Html.DisplayNameFor(model => model.subCategoryName)

Теперь он работает!

Ответ 2

Я думаю, что правильным решением в этом случае является не использование LabelFor, а использование нового метода MVC 4 DisplayNameFor.

 @Html.DisplayNameFor(model => model.subCategoryName)

Я заметил, что вы сказали, что это не сработало, но это кажется странным. Вот пример на ASP.Net - добавление нового поля в модель и таблицу фильмов именно с тем, что вы пытаетесь сделать.

Ответ 3

[Mostly use in Display Name]
@Html.DisplayNameFor(model => model.UserName) 

[Used for Label, Functionality of Label click on it then cursor point to related control]

 @Html.LabelFor(m => m.UserName)               

[Used for Textbox]

@Html.TextBoxFor(m => m.UserName)

[Used for Validation Message]

@Html.ValidationMessageFor(m => m.UserName)

Ответ 4

Конкретной целью Html.LabelFor является создание тега <label>, поэтому то, что вы просите, кажется немного искаженным. Однако доступ к атрибутам свойств немного связан. Что вам нужно сделать, так это:

@{
    var prop = Model.GetType().GetProperty("subCategoryName");
    var displayAttrs = prop.GetCustomAttributes(typeof(DisplayAttribute),true);
    var name = displayAttrs.Any() ? 
        ((DisplayAttribute)displayAttrs.First()).Name :
        "(No Name Set)";
}
<div class="editor-label">
    @name
</div>

Если это кажется слишком грязным, конечно, вы можете включить его в функцию полезности. Вам также может потребоваться обработать специальный случай, когда атрибут Display не установлен (я просто возвращаю "(No Name Set)" выше).