ASP.NET MVC 4 AJAX提交表单无法正常工作

问题描述:

我想一个形式从同步转换使用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

有我丢失的东西?

也许你错过了不显眼的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

如果我理解正确,你正在试图把数据上传到控制器,成功后你需要去主页?如果不是,你能否澄清。因此,将尽力帮您

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

我有同样的问题...我已经更新了所有js文件与NuGet包控制台。

只是我的2美分,而且在写作的时候,jquery.unobtrusive.ajax文件不包含对过时的jQuery函数调用“.live”(=>它是从jQuery的1.9+版本删除)jquery live

我觉得有像出现4次,你必须与。对改变,现在它工作正常;-)