[英]MVC5 Ajax.BeginForm refresh whole page
為什么表單帖子沒有通過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);
}
我忘記了什么嗎?
您必須在視圖中包含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 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文件中
<appSettings>
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.