MVC5 Ajax.BeginForm刷新整个页面

时间:2014-12-02 06:13:05

标签: c# asp.net-mvc ajax.beginform

为什么表单帖子没有通过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);
}

我忘记了什么吗?

3 个答案:

答案 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>