我將用解決方案更新此問題,我想包括我的問題和解決方案,因爲我無法在Stackoverflow上找到它。如果您想要使用解決方案,請隨時取消。Ajax.BeginForm不會觸發AJAX腳本,在回發時退步
我有一個新創建的使用Visual Studio 2013創建的'Empty'MVC5項目。如果可能,我需要一個來自並想要AJAX行爲。使用Ajax.BeginForm在MVC3中總是很直接,所以我認爲它也會在MVC5中。
但是,當我點擊提交按鈕時,我沒有在OnBegin,OnFailure或AjaxOptions中的OnSuccess中指定的javascript函數被調用。相反,Ajaxless文章被髮送到服務器,通過檢查返回false的Request.IsAjaxRequest,證明這是真實的。
我得出結論,出於某種原因,然後,阿賈克斯根本沒有被使用。我檢查了一些東西,如web.config中,我的佈局腳本等
我的佈局包括以下腳本:
<script src="~/Scripts/jquery-1.5.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
我的web.config包括:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
</configuration>
我的觀點:
@model ContactEnquiryViewModel
@{
AjaxOptions ContactOptions = new AjaxOptions()
{
OnBegin = "OnConactFormBegin()",
OnSuccess = "OnContactFormSuccess()",
OnFailure = "OnContactFormFailure()"
};
}
<div id="EnquiryFormContainer">
@using (Ajax.BeginForm("Contact", "Home", new { formName = "EnquiryForm" }, ContactOptions))
{
@Html.HiddenFor(m => m.Subject)
<div class="field">
@Html.LabelFor(m => m.FirstName)
@Html.TextBoxFor(m => m.FirstName)
<div class="validation">
@Html.ValidationMessageFor(m => m.FirstName)
</div>
</div>
<div class="field">
@Html.LabelFor(m => m.LastName)
@Html.TextBoxFor(m => m.LastName)
<div class="validation">
@Html.ValidationMessageFor(m => m.LastName)
</div>
</div>
<div class="field">
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email)
<div class="validation">
@Html.ValidationMessageFor(m => m.Email)
</div>
</div>
<div class="field">
@Html.LabelFor(m => m.PhoneNumber)
@Html.TextBoxFor(m => m.PhoneNumber)
<div class="validation">
@Html.ValidationMessageFor(m => m.PhoneNumber)
</div>
</div>
<div class="field">
@Html.LabelFor(m => m.Comments)
@Html.TextAreaFor(m => m.Comments)
<div class="validation">
@Html.ValidationMessageFor(m => m.Comments)
</div>
</div>
<div id="submitButtonContainer">
<input type="submit" value="Submit" name="submit" />
</div>
}
</div>
我的控制器動作(未完成):
[HttpPost]
public ActionResult Contact(ContactViewModel viewModel, String formName = "")
{
if (Request.IsAjaxRequest())
{
return new EmptyResult();
}
return new EmptyResult();
}
我檢查了一些其他帖子在這個問題上,並找不到解決方案。雖然有人暗示可能的解決方案,但我被微軟CDN(http://www.asp.net/ajaxlibrary/cdn.ashx)弄糊塗了。
在Microsoft CDN它們具有以下部分:
下ASP.NET MVC的JavaScript文件均在此CDN託管:
ASP.NET MVC 5.0
http://ajax.aspnetcdn.com/ajax/mvc/5.0/jquery.validate.unobtrusive.js
http://ajax.aspnetcdn.com/ajax/mvc/5.0/jquery.validate.unobtrusive.min.js
ASP.NET MVC 4.0
http://ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.js
http://ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js
ASP.NET MVC 3.0
http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.min.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/MicrosoftMvcAjax.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/MicrosoftMvcAjax.debug.js
ASP.NET MVC 2.0
http://ajax.aspnetcdn.com/ajax/mvc/2.0/MicrosoftMvcAjax.js
http://ajax.aspnetcdn.com/ajax/mvc/2.0/MicrosoftMvcAjax.debug.js
ASP.NET MVC 1.0
http://ajax.aspnetcdn.com/ajax/mvc/1.0/MicrosoftMvcAjax.js
http://ajax.aspnetcdn.com/ajax/mvc/1.0/MicrosoftMvcAjax.debug.js
他們似乎暗示你會唯一的腳本需要MVC5的是jquery.validate.unobtrusive。
我想有就行'OnBegin =「OnConactFormBegin()」一個錯字;' –
是的,這是一個錯字,方法應該是OnContactFormBegin。 – Tentux
正如RitchieD使用NuGet指出的那樣,您可以通過獲取適當的庫來輕鬆解決這些問題。如果您遇到像描述的問題,可能是由於缺少庫或正在使用的不兼容庫。 – Tentux