2015-07-07 2 views
0

У меня есть приложение .NET MVC. В одном из представлений есть модальный. Внутри модального есть форма.Ajax Form Submit w/preventDefault() всегда ударяет Успех

Несколько замечаний ...

  • Поскольку форма находится внутри модального, я пытаюсь использовать немного Ajax, чтобы предотвратить форму делать представления по умолчанию.
  • Форма сама находится внутри частичного представления
  • Я использую стандартные встроенные сценарии проверки MVC вместе с аннотациями данных в модели частичного представления. Пример:

    [Display(Name = "Address")] 
    [Required()] 
    [StringLength(200)] 
    public string Address { get; set; } 
    

Это сценарий, я пытаюсь использовать, чтобы предотвратить подачу по умолчанию:

 $(function() { 
      var frm = $('#form-accountprofileedit'); 
      frm.submit(function (ev) { 
       ev.preventDefault(); 
       $.ajax({ 
        type: frm.attr('method'), 
        url: frm.attr('action'), 
        data: frm.serialize(), 
        success: function (data) { 
         alert('ok'); 
        } 
       }); 
      }); 
     } 

При нажатии кнопки передачи и обязательные поля пусты, я нужен отображаются сообщения о проверке. Но вместо этого появляется диалоговое окно «ok», указывающее, что проверка прошла успешно.

Что я делаю неправильно?

(я могу разместить больше кода, если потребности.)

EDIT ПОСЛЕ:

Вот форма (похудела):

@using (Html.BeginForm("AccountProfileEdit", "Account", FormMethod.Post, new { id = "form-accountprofileedit", @class = "full-form" })) 
    { 
    @Html.ValidationSummary(true) 

    @Html.CustomTextboxFor(model => model.Address) 

    <div style="text-align:right;"> 
     <button type="submit" id="accountprofileedit-submit" name="accountprofileedit-submit" value="Edit Account" class="btn btn-primary" style="margin-left:5px;">Edit Account</button> 
     <button type="button" class="btn btn-primary" data-dismiss="modal">Cancel</button> 
    </div> 
} 
+0

Как выглядит ваш cshtml для создания только формы? На этот вопрос в настоящее время невозможно ответить. –

+0

Я отредактировал OP с формой. Благодаря! –

+0

Что такое CustomTextboxFor? Я не вижу подтверждения в вашей форме, только сводка валидации. Какой HTML-код создает этот CustomTextboxFor хелпер? – br4d

ответ

0

Проблема заключается в том, что независимо от того, независимо от того, действителен ли он ModelState, контроллер всегда будет возвращать статус 200 (OK), когда вы возвращаете частичный вид из действия «Пост». Вы можете переопределить это, установив код состояния ответа.

if (!ModelState.IsValid) 
{ 
    Response.StatusCode = 400; 
    return PartialView("_FormBody", model); 
} 

Затем вам необходимо заменить тело формы ответом от сервера, чтобы отобразить сообщения проверки.

$(function() { 
    var frm = $('#form-accountprofileedit'); 
    frm.submit(function (ev) { 
     ev.preventDefault(); 
     $.ajax({ 
      type: frm.attr('method'), 
      url: frm.attr('action'), 
      data: frm.serialize(), 
      success: function (data) { 
       alert('ok'); 
      }, 
      error: function (xhr, status, error) { 
      $('#form-accountprofileedit').html(xhr.responseText); 
     } 
     }); 
    }); 
} 

Примечание: не заменяйте весь элемент формы, иначе вы удалите обработчик отправки.