Форма Ajax и UpdateTargetId после отправки данных, когда ModelState недействителен

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

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

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

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

Ниже приведена еще одна публикация stackoverflow по аналогичной проблеме, но решений не было.

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

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


person Bronzato    schedule 06.11.2011    source источник


Ответы (1)


Вместо использования 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);
    }
}
person Darin Dimitrov    schedule 07.11.2011
comment
Большое спасибо, я рад видеть, что есть решение для помощника Ajax.Beginform. - person Bronzato; 07.11.2011