ASP.NET MVC 4 AJAX Форма отправки не работает - PullRequest
14 голосов
/ 30 января 2012

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

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

   @{
        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>

Ответы [ 3 ]

28 голосов
/ 30 января 2012

Я что-то упускаю?

Возможно, вам не хватает ненавязчивого скрипта ajax:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
0 голосов
/ 31 января 2013

У меня была такая же проблема ... Я обновил все файлы js с помощью консоли пакета nuget.

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

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

0 голосов
/ 30 января 2012

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

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
    }
...