2013-12-18 2 views
1

Все,MVC 3 AJAX Форма проводки

Я пытаюсь реализовать AJAX пост в форме. (Новое в ASP.NET MVC, выходя из фона Rails)

Когда я отправить форму и наблюдайте за консолью FireBug, а также с страницей, форма не делает сообщение AJAX. Обработчик AJAX вызывается (Contact/Process) и перенаправляет форму туда, чтобы Contact/Process отображал только ответное сообщение, вместо того, чтобы обновлять обозначенный div в форме

Я должен внедрить что-то не так, какое-то место, скорее всего, в контроллере, который обрабатывает AJAX POST. Не знаю, что еще.

Благодаря

Форма (/Views/Contact/Create.cshtml)

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

<div id="content"> 
    <div id="Status"></div> 
    @using (Ajax.BeginForm("Process","Contact", new AjaxOptions{ HttpMethod = "POST", UpdateTargetId = "Status"})) 
    { 
     @Html.ValidationSummary(true) 

     <p><span class="required">&#42; All fields are required.</span></p> 

     <!-- First Name --> 
     <div> 
      @Html.LabelFor(model => model.Contact.FirstName) <span class="required">&#42;</span> 
     </div> 
     @Html.EditorFor(model => model.Contact.FirstName) 
     @Html.ValidationMessageFor(model =>model.Contact.FirstName) 


     <div> 
      <input type="submit" name="submit" value="Submit" class="btn"/> 
     </div> 

    } 

</div> 

Контроллер действия (/Controllers/ContactController.cs)

[HttpPost] 
    public string Process(ContactViewModel c) 
    { 
     if (ModelState.IsValid) 
     { 
      c.Contact.DateCreated = DateTime.Now; 
      db.Contacts.Add(c.Contact); 
      db.SaveChanges(); 

      return "Success!"; 

     } 

     return "Failure"; 

    } 

ответ

2

Вы нужны эти две библиотеки:

<script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

Update

Ваше действие процесс должен возвращать ActionResult и использовать Content, а не строки.

Изменить его к этому:

[HttpPost] 
public ActionResult Process(ContactViewModel c) 
{ 
    if (ModelState.IsValid) 
    { 
     c.Contact.DateCreated = DateTime.Now; 
     db.Contacts.Add(c.Contact); 
     db.SaveChanges(); 

     return Content("Success!"); 

    } 

    return Content("Failure"); 

} 
+0

Хорошая ловушка на полной библиотеке jquery, а также на ненавязчивой. – krillgar

+0

Вы также можете добавить элемент загрузки в свои параметры ajax, добавив LoadElementId = "loading". :) – hutchonoid

+0

hmm. все еще не работает - мне нужно перехватить кнопку отправки? – Slinky

1

Вам нужно добавить скрипт jquery на страницу

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
+0

Это всегда боль. Мой первый проект MVC был месячным. Когда я начал свой второй проект, я часами вытягивал свои волосы, пытаясь понять, почему он не работает. ^^ Вот почему. – krillgar

+0

Дайте вам верх, так как это была одна из проблем, которые я перечислил. :) – hutchonoid

Смежные вопросы