Привязка MVC EditorTemplate не работает для 2 элементов на одной странице - PullRequest
0 голосов
/ 06 ноября 2019

Моя страница отображается рядом с массивами объектов класса 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" })
}

EditorTemplate (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 сам по себе, он работает для обоих массивов.

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

1 Ответ

0 голосов
/ 07 ноября 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...