MVC5 Ajax.BeginForm刷新整个页面

为什么表单post没有通过ajax发生,而是重新加载到新页面?

我的.js包括:

   

我的剃刀观点:

 
@using (Ajax.BeginForm("Login",null, new AjaxOptions { UpdateTargetId = "login-partial-update", HttpMethod = "POST" }, new { id = "js-form-login" })) { @Html.TextBoxFor(x => x.Email, new {placeholder = "Email address"})
@Html.ValidationMessageFor(x=>x.Email)
@Html.PasswordFor(x => x.Password, new {placeholder = "Password"})
@Html.ValidationMessageFor(x => x.Password)
}

我的控制器代码:

 [HttpPost] public ActionResult Login(LoginInputModel login) { return PartialView("Widgets/Popups/_LoginInput", login); } 

我忘了什么吗?

您必须在视图中包含jquery.unobtrusive-ajax.js文件才能使Ajax.BeginForm正常工作。

这真的让我失望,并且在寻找解决方案时 – 99%的回复都集中在以前版本的MVC和/或从未提及所需的NuGet包。 出于某种原因,VS2013在构建默认MVC项目时不包含“Microsoft jQuery Unobtrusive Ajax”包。 我发现也不需要“jQueryvalidation”包。

一旦我安装了该软件包,并添加了脚本引用,结果就会正确返回到目标DIV。

为了确认,我正在使用: – VS2013与MVC 4.5.1 – jQuery 2.1.3 – Microsoft jQuery Unobtrusive Ajax 3.2.3

在BundleConfig.cs中,由于混淆,我决定添加一个新的bundle:

 bundles.Add(new ScriptBundle("~/bundles/jqueryunob").Include( "~/Scripts/jquery.unobtrusive*")); 

然后通过在_Layout.cshtml中引用它将其应用于所有页面:

 @Scripts.Render("~/bundles/jqueryunob") 

将此密钥代码添加到webconfig文件中