Значения формы MVC не сбрасываются - PullRequest
0 голосов
/ 07 мая 2018

У меня проблема с тем, что скрытые значения в форме не обновляются при возврате нового ActionResult.

Например, пользователь проверит несколько записей и нажмет кнопку «Завершение обновления». Это делает Ajax вызываемым для действия UpdateCompleted, которое устанавливает дату для проверенных записей, и как только вызов Ajax возвращает форму, отправляется форма. После выполнения некоторой логики в методе отправки действия формы, возвращается обновленная модель со значением IsChecked, установленным в false для всех записей в модели, но форма сохраняет предыдущее проверенное значение, поскольку сгенерированный идентификатор ниже имеет то же значение.

Код

    <td>
        @Html.CheckBoxFor(model => Model.WorkOrderDetails[x].IsChecked)
        @Html.HiddenFor(modelItem => Model.WorkOrderDetails[x].IsChecked)
        @Html.HiddenFor(modelItem => Model.WorkOrderDetails[x].WorkOrderEntityId)
        @Html.HiddenFor(model => model.WorkOrderDetails[x].WorkOrderId)
    </td>

Визуализированный HTML

    <td>
        <input data-val="true" data-val-required="The IsChecked field is required." id="WorkOrderDetails_0__IsChecked" name="WorkOrderDetails[0].IsChecked" type="checkbox" value="true"><input name="WorkOrderDetails[0].IsChecked" type="hidden" value="false">
        <input id="WorkOrderDetails_0__IsChecked" name="WorkOrderDetails[0].IsChecked" type="hidden" value="False">
        <input id="WorkOrderDetails_0__WorkOrderEntityId" name="WorkOrderDetails[0].WorkOrderEntityId" type="hidden" value="ODU=">
        <input id="WorkOrderDetails_0__WorkOrderId" name="WorkOrderDetails[0].WorkOrderId" type="hidden" value="NjQ4OTU3">
    </td>

Введите код

@using(@Html.BeginForm("Index", "WorkOrderMaster", FormMethod.Post, new { id = "workOrderMasterForm" }))
{
<div>
<div class="project-buttons">
    <div class="btn-group">
        <input id="submitCompletion" class="btn btn-success" value="Update Completion" data-submit-url='@Url.Action("UpdateCompleted", "WorkOrderMaster")' />
    </div>
</div>

$(function () {
    $('#submitCompletion').click(function () {
        $.ajax({
            type: 'POST',
            url: $(this).data('submit-url'),
            data: $('#workOrderMasterForm').serialize(),
            success: function (data) {
                $('#workOrderMasterForm').submit();
            }
        });
    });
});

Я ожидаю, что будут использоваться новые значения из модели, но этого не происходит.

Рекомендуется ли в этой ситуации вручную кодировать входные значения, чтобы избежать использования следующего формата?

ClassName_Index_PropertyName

Заранее благодарим за то, что вы потратили время на рассмотрение этого вопроса.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

В попытке продолжать двигаться в этом направлении. Я переместил форму в частичное представление и добавил div, чтобы загрузить частичное представление. Каждый раз, когда событие запускается на странице через множество фильтров или пользователей, отправляющих проверенные записи, div очищается и перезагружается. Это решило мою проблему.

0 голосов
/ 07 мая 2018

На основании предоставленного кода вы выполняете AJAX-вызов на сервер, но ожидаете, что значения будут очищены после завершения операции.

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

$(function () {
    $('#submitCompletion').click(function () {
        $.ajax({
            type: 'POST',
            url: $(this).data('submit-url'),
            data: $('#workOrderMasterForm').serialize(),
            success: function (data) {
                $('#workOrderMasterForm').reset();
            }
        });
    });
});

Изменение в обещании успеха, где "$ ('# workOrderMasterForm'). Sugmit ();" изменено на "$ ('# workOrderMasterForm'). reset ();".

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