Привязка MVC EditorTemplate не работает для 2 элементов на одной странице

Моя страница отображается рядом с массивами объектов класса ExternalExeWorkerSettings. Для рендеринга объектов я создал шаблон редактора для «ExternalExeWorkerSettings».

Страница правильно заполняется элементами из обоих массивов вдоль страницы. При сохранении страницы захватываются только элементы первого массива. Во втором массиве созданы все экземпляры «ExternalExeWorkerSettings», но все они имеют состояние по умолчанию. Никакие свойства ExternalExeWorkerSettings не захватываются ни для одного экземпляра второго массива.

Показаны соответствующие части кода:

Просмотр (страница)

@for (int i = 0; i < Model.Count(); i++)
{            
    //Left Array (SettingsViewModelPRD)
    @Html.EditorFor(model => Model[i].SettingsViewModelPRD, null, "ActivityList[" + @i + "].SettingsViewModelPRD", new { htmlAttributes = new {     @class = "editSettings" } })
    @Html.ValidationMessageFor(model => model[i].SettingsViewModelPRD, "", new { @class = "text-danger" })

    //Right Array (SettingsViewModelTST)
    @Html.EditorFor(model => Model[i].SettingsViewModelTST, null, "ActivityList[" + @i + "].SettingsViewModelTST")
    @Html.ValidationMessageFor(model => model[i].SettingsViewModelTST, "", new { @class = "text-danger" })
}

Шаблон редактора (ExternalExeWorkerSettings.cshtml)

@model ACT_Workers.Workers.ExternalExeWorkerSettings

@using (Html.BeginForm())
{
<div class="form-horizontal">
    <div class="activity-box">
        <strong>External Exe</strong>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })

        <div class="form-group">
            @Html.LabelFor(model => model.exeName, htmlAttributes: new { @class = "control-label" })
            <div class="activty-textbox">
                @Html.EditorFor(model => model.exeName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.exeName, "", new { @class = "text-danger" })
            </div>
        </div>
        ...

Визуализированный HTML-код из шаблона редактора

//SettingsViewModelPRD
<input class="form-control text-box single-line" data-val="true" data-val-maxlength="Max size exceeded" data-val-maxlength-max="255" data-val-minlength="Field is required" data-val-minlength-min="1" data-val-required="The Nome do Executável field is required." id="ActivityList_0__SettingsViewModelPRD_exeName" name="ActivityList[0].SettingsViewModelPRD.exeName" type="text" value="">

//SettingsViewModelTST
//the attribute name is good and the value is correctly populated    
<input class="form-control text-box single-line" data-val="true" data-val-maxlength="Max size exceeded" data-val-maxlength-max="255" data-val-minlength="Field is required" data-val-minlength-min="1" data-val-required="The Nome do Executável field is required." id="ActivityList_0__SettingsViewModelPRD_exeName"name="ActivityList[0].SettingsViewModelPRD.exeName" type="text" value="something">

Тем не менее, в контроллере каждый объект массива SettingsViewModelTST имеет все свойства, установленные на null. Массив SettingsViewModelPRD правильно заполнен.

Еще более странно, если я удалю шаблон редактора и позволю себе сгенерировать html, он будет работать для обоих массивов.

Это похоже на ошибку фреймворка, но этот сценарий не является нетипичным. Что здесь может быть не так?


person MiguelSlv    schedule 06.11.2019    source источник


Ответы (1)


Удалите @using (Html.BeginForm()) из шаблона редактора.

person MiguelSlv    schedule 07.11.2019