MVC5 Ajax.BeginForm 刷新整个页面

本文关键字:刷新 Ajax BeginForm MVC5 | 更新日期: 2023-09-27 18:32:40

为什么表单发布不是通过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);
}

我是不是忘了什么?

MVC5 Ajax.BeginForm 刷新整个页面

您必须

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

这真的让我感到困惑,在寻找解决方案时 - 99% 的回复都集中在以前版本的 MVC 和/或从未提及所需的 NuGet 包。由于某种原因,VS2013在构建默认MVC项目时不包括"Microsoft jQuery Unobtrusive Ajax"包。我发现也不需要"jQuery验证"包。

安装该包并添加脚本引用后,结果将正确返回到目标 DIV。

为了确认,我正在使用: - VS2013 MVC 4.5.1 - jQuery 2.1.3 - Microsoft jQuery 不显眼的 Ajax 3.2.3

在 BundleConfig 中.cs由于混淆,我决定添加一个新捆绑包:

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

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

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

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

 <appSettings>
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
 </appSettings>