Как избавиться от метки по умолчанию в EditorForModel

У меня есть проект ASP.Net MVC, над которым я работаю, и у меня есть модель, которую я хочу превратить в форму. Я хочу использовать EditorForModel() для этого, потому что я хочу, чтобы он автоматически добавлял поля в форму, если я решу добавить/удалить свойства в модели позже.

Проблема, с которой я сталкиваюсь, заключается в том, что редактор для модели принимает каждое свойство и создает следующий HTML: (это просто общий, а не фактический код)

<div class="editor-label"><label>Label Title</label></div>
<div class="editor-field"><input type="type"/></div

Однако то, что я хочу сделать для каждого поля, таково:

<div class="editor-field">
    <label>Label Title</label>
    <input type="type"/>
</div>

Но если я попытаюсь сделать это в шаблоне редактора, вместо этого я получу следующее:

<div class="editor-label"><label>Label Title</label></div>
<div class="editor-field">
    <label>Label Title</label>
    <input type="type"/>
</div>

Как я могу заставить EditorForModel() не создавать собственное поле метки? Я знаю, что всегда мог бы стилизовать его как скрытый в CSS, но было бы неплохо, если бы его даже не было с самого начала, чтобы я мог ограничить путаницу в коде.

Заранее спасибо.

PS: я также пытался использовать [HiddenInput(DisplayValue = false)], но это просто скрывает все поле, а не только метку.


person Joe Higley    schedule 30.04.2017    source источник


Ответы (1)


Вам нужно написать это в шаблоне редактора cshtml, чтобы он работал как положено:

@foreach (var property in ViewData.ModelMetadata.Properties)
{
    <div class="editor-field">
        <label>@property.GetDisplayName()</label>
        @Html.Editor(property.PropertyName)
    </div>
}
person CodeNotFound    schedule 30.04.2017
comment
Я поместил это в string.cshtml, и он сделал действительно странную вещь, когда он запускал это несколько раз для каждого строкового свойства. Нужно ли использовать собственный шаблон редактора моделей вместо шаблона редактора типов. Например, моя модель имеет 4 строковых свойства и 2 целочисленных свойства. входит ли этот код в ModelName.cshtml или String.cshtml? - person Joe Higley; 01.05.2017
comment
Если у вас есть конкретная модель, создайте модель [TypeName].chstml в шаблоне редактора. Если он общий, создайте шаблон Object.cshtml в той же папке. На ваш взгляд, вы должны просто вызвать @Html.EditorForModel() только для того, чтобы это сработало. - person CodeNotFound; 01.05.2017
comment
Кстати, шаблон должен находиться в папке EditorTemplates. - person CodeNotFound; 01.05.2017
comment
Очень быстрый вопрос, на самом деле не связанный с этим. Если мне нужно проверить, требуется ли свойство в шаблоне редактора, я знаю, что могу использовать свойство property.IsRequired. Но это возвращает true для типов значений. Есть ли способ проверить, действительно ли тип значения установлен в соответствии с требованиями? - person Joe Higley; 01.05.2017
comment
Давайте продолжим обсуждение в чате. - person Joe Higley; 01.05.2017
comment
ValueType требуются по умолчанию. Если вы хотите удалить это требование, вы должны использовать Nullable‹T›, где T — это ValueType. - person CodeNotFound; 01.05.2017