为什么表单帖子没有通过ajax发生,而是重新加载到新页面?
我的.js包括:
<script src="/App/JavaScript/Libraries/jquery-1.11.1-min.js"></script>
<script src="/App/JavaScript/Libraries/jquery.validate.js"></script>
<script src="/App/JavaScript/Libraries/jquery.validate.unobtrusive.js"></script>
我的剃刀观点:
<div id="login-partial-update">
@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"})
<div class="errormessage">
@Html.ValidationMessageFor(x=>x.Email)
</div>
@Html.PasswordFor(x => x.Password, new {placeholder = "Password"})
<div class="errormessage">
@Html.ValidationMessageFor(x => x.Password)
</div>
}
</div>
我的控制器代码:
[HttpPost]
public ActionResult Login(LoginInputModel login)
{
return PartialView("Widgets/Popups/_LoginInput", login);
}
我忘记了什么吗?
答案 0 :(得分:12)
您必须在视图中加入jquery.unobtrusive-ajax.js
文件才能使Ajax.BeginForm
生效。
答案 1 :(得分:10)
这真让我兴奋不已,并且在寻找解决方案时 - 99%的回复都集中在以前版本的MVC和/或从未提及所需的NuGet包。 出于某种原因VS2013,不包括&#34; Microsoft jQuery Unobtrusive Ajax&#34;在构建默认MVC项目时打包。 我发现&#34; jQuery验证&#34;也不需要包裹。
安装该软件包并添加脚本引用后,结果会正确返回到目标DIV。
要确认,我正在使用: - VS2013与MVC 4.5.1 - jQuery 2.1.3 - Microsoft jQuery Unobtrusive Ajax 3.2.3
在BundleConfig.cs中,由于混淆,我决定添加一个新的包:
bundles.Add(new ScriptBundle("~/bundles/jqueryunob").Include(
"~/Scripts/jquery.unobtrusive*"));
然后通过在_Layout.cshtml中引用它来将其应用于所有页面:
@Scripts.Render("~/bundles/jqueryunob")
答案 2 :(得分:5)
将此密钥代码添加到webconfig文件
<appSettings>
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>