2012-01-30 3 views
14

Я пытаюсь преобразовать форму из синхронны асинхронным используя вспомогательный метод Ajax.BeginForm в MVC 4.ASP.NET MVC 4 AJAX Submit Form не работает

На мой взгляд, у меня есть:

@{ 
     ViewBag.Title = "Users > Edit"; 
     var options = new AjaxOptions() 
          { 
           Url = Url.Action("Edit", "User"), 
           LoadingElementId = "saving", 
           LoadingElementDuration = 2000, 
           Confirm = "Are you sure you want to save this User?" 
          }; 
    } 

    <div id="saving" style="display:none; color:Red; font-weight: bold"> 
     <p>Saving...</p> 
    </div> 

    @using (Ajax.BeginForm(options)) 
    { 
     @Html.ValidationSummary(true) 
     <fieldset> 
      .... FIELDS ... 
      <p> 
       <input type="submit" value="Save" /> 
      </p> 
     </fieldset> 
    } 

Когда нажата кнопка отправки, выполняется полная обратная передача. Мой метод действий выглядит следующим образом:

[HttpPost] 
public ActionResult Edit(User user) 
{ 
    if (ModelState.IsValid) 
    { 
     _repository.Save(user); 
     TempData["message"] = String.Format("{0} has been saved.", user.Username); 
    } 

    return View(user); 
} 

Есть ли что-то, что мне не хватает? Имеет ли текущий выпуск MVC 4 несколько проблем?

В моем Web.Config у меня есть ClientValidationEnabled и UnobtrusiveJavaScriptEnabled для true.

У меня также есть эти указания в моем _Layout.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> 
+2

Важное примечание; jquery-1.9.0.min.js не поддерживает Ajax.FormBegin и Ajax.ActionLink :( –

ответ

26

Есть ли что-то я не хватает?

Может быть, вам не хватает ненавязчивого Ajax скрипт:

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

+1 у вас это получилось: D –

+0

Да, вы его заметили! Были ли validate.unobtrusive.js и т. Д. И т. Д. Doh! Спасибо: D – adamwtiko

+0

вы спасли мой день! –

0

, если я понял правильно, вы выкладываете данные в контроллер, после того, как успешно вы должны перейти на главную страницу ?? если нет, вы можете уточнить. так что будет пытаться помочь вам

if (ModelState.IsValid) 
    { 
     _repository.Save(user); 
     TempData["message"] = String.Format("{0} has been saved.", user.Username); 
     return RedirectToAction("yourActionToRedirect"); // after succesfull it will go to the index view 
    } 
+0

В этом примере мне бы хотелось вернуться к текущему виду с теми же данными пользователя, например, return View (user); – adamwtiko

+0

, а затем что это проблема ?? попыталась отладить его? Это удар по действию на User Controller? –

+0

Что он не ведет себя асинхронным образом. Страница отправляется назад и Request.IsAjaxRequest() возвращает false в действии Изменить – adamwtiko

0

я имел такую ​​же проблему ... Я обновил все JS файлы с NuGet консоли пакета.

только мои 2 цента, но и в момент написания, файл jquery.unobtrusive.ajax действительно содержит вызовы на устаревшие функции Jquery «.live» (=> он удаляется из Jquery 1.9+ версии) jquery live

Я думаю, что есть как 4 вхождений, что вам придется изменить с .На, теперь он работает нормально ;-)