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 и т.д.) - и все еще не могу заставить его работать.
Ответы
Ответ 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)"
выше).