Форма Ajax и UpdateTargetId после отправки данных, когда ModelState недействителен - PullRequest
2 голосов
/ 06 ноября 2011

На мой взгляд, у меня есть 2 частичных просмотра.

  • 1-е частичное представление (PV1) : пользователь может ввести элемент в текстовое поле и отправить его с помощью формы Ajax.
  • 2-е частичное представление (PV2) : пользователь может видеть список ранее представленных элементов.

PV1 использует UpdateTargetId в div на PV2, потому что мы хотели бы обновить наш список добавленным элементом.

Все работает хорошо, если элементы, представленные на PV1, действительны. Не работает при ModelState.IsValid == false при отправке формы ajax. Это не работает, потому что UpdateTargetId расположен на PV2, и мне нужно обновить PV1 для отображения ошибок ModelState. Итак, мы сталкиваемся с дубликатом PV1 на PV2!

Ниже приведено еще одно сообщение о переполнении стека по аналогичной проблеме, но не было найдено решений.

ASP.NET MVC AJAX изменить UpdateTargetId, если ModelState недействителен

Я думаю, что альтернатива Json может быть решением, но мне интересно, можем ли мы адаптировать стандартный Ajax form метод для удовлетворения наших потребностей здесь?

1 Ответ

7 голосов
/ 07 ноября 2011

Вместо использования UpdateTargetId, вы можете попробовать использовать OnComplete:

@using (Ajax.BeginForm(new AjaxOptions { OnComplete = "complete" }))
{
    ...
}

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

function complete(result) {
    var isError = $('span.field-validation-error', result.responseText).length > 0;
    if (isError) {
        // there was an error => we update the container of the form
        $('#frmContainer').html(result.responseText);
    } else {
        // no error => we hide validation errors and update the result container
        $('#frm .field-validation-error').hide();
        $('#frm .input-validation-error').removeClass('input-validation-error');
        $('#result').html(result.responseText);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...