2012-01-30 133 views
14

我想一個形式從同步轉換使用MVC 4ASP.NET MVC 4 AJAX提交表單無法正常工作

的Ajax.BeginForm輔助方法,在我看來,異步I有:

@{ 
     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 :( – 2013-01-20 20:48:57

回答

26

有我丟失的東西?

也許你錯過了不顯眼的AJAX腳本:

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

+1你得到它:D – 2012-01-30 15:39:29

+0

是啊,你發現它!有validate.unobtrusive.js等等等等Doh!感謝:D – adamwtiko 2012-01-30 15:40:36

+0

你已經救了我的一天! – 2013-06-30 15:24:39

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

在這個例子中,我真的想返回到當前視圖與相同的用戶數據,例如返回查看(用戶); – adamwtiko 2012-01-30 15:34:50

+0

然後什麼問題是否嘗試調試它是否觸發用戶控制器上的操作 – 2012-01-30 15:36:14

+0

它不是以異步方式運行該頁面被重新發回並且Request.IsAjaxRequest()在Edit操作中返回false – adamwtiko 2012-01-30 15:37:20

0

我有同樣的問題...我已經更新了所有js文件與NuGet包控制檯。

只是我的2美分,而且在寫作的時候,jquery.unobtrusive.ajax文件不包含對過時的jQuery函數調用「.live」(=>它是從jQuery的1.9+版本刪除)jquery live

我覺得有像出現4次,你必須與。對改變,現在它工作正常;-)