Шаблон редактора MVC3 для IEnumerable не генерирует атрибут «for» в @ Html.LabelFor - PullRequest
2 голосов
/ 02 августа 2011

У меня есть собственный EditorTemplate для моего ViewModel класса (он генерирует список флажков).

На мой взгляд, моя модель IEnumerable<ViewModel>, но когда я вызываю @Html.EditorForModel() в сгенерированном HTML, for атрибут тега label становится пустым.

Все отлично работает, когда я хочу сделать только один флажок.

public class StateViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}

EditorTemplate:

@model Mcs.Sibs.UI.Web.Models.StateViewModel

@Html.HiddenFor(x => x.Id)
<div>
    @Html.CheckBoxFor(x => x.Checked)
    @Html.LabelFor(x => x.Checked, Model.Name)
</div>

My View:

@model IEnumerable<Mcs.Sibs.UI.Web.Models.StateViewModel>
@using (Html.BeginForm()
{    
    @Html.EditorForModel()
}

Сгенерированный HTML выглядит следующим образом (для одного флажка):

<input type="hidden" value="1" name="[0].Id" data-val-required="The Id field is    required." data-val-number="The field Id must be a number." data-val="true">
<div>
<input type="checkbox" value="true" name="[0].Checked" data-val-required="The Checked   field is required." data-val="true">
<input type="hidden" value="false" name="[0].Checked">
<label for="">Checkbox label</label>

Вы видите, что атрибут for пуст. Я делаю что-то не так или это какая-то ошибка в MVC3 по умолчанию EditorTemplate для IEnumerable<T>?

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Попробуйте это:

@Html.EditorFor(model => model)
0 голосов
/ 13 января 2013

У меня тоже была эта проблема, и после часа неработающих решений я решил использовать дополнительную ViewModel для обертывания коллекции IEnumerable

Пожалуйста, попробуйте следующий код:

public class MyViewModel
{
    public List<StateViewModel> StateViewModels { get; set; }
}

Тогда, по вашему мнению:

@model IEnumerable<Mcs.Sibs.UI.Web.Models.MyViewModel>
@using (Html.BeginForm()
{    
    @Html.EditorFor(m => m.StateViewModels)
}

Идентификатор и атрибуты будут сгенерированы правильно.
Конечно, вы можете адаптировать названия моделей к вашим соглашениям об именах:)

...