awr*_*ley 4 ajax html5 ajax.beginform asp.net-mvc-4
我已经将ASP.NET MVC 3中的应用程序更新为ASP.NET MVC 4.
该应用程序在MVC 3中运行良好.唯一不适用于MVC 4的是Ajax.Begin形式:表单默认为完整页面请求,而不是异步AJAX请求.
从本质上讲,它是我写的一个向导,但这是无关紧要的.Model.Step.ActionName正确返回一个字符串(参见下面的代码).
视图中的代码是:
@{
using (Ajax.BeginForm(Model.Step.ActionName, null, new AjaxOptions { UpdateTargetId = "wizardStep", OnBegin="isValid", LoadingElementId="PleaseWait", OnSuccess="SetFocusOnForm" },
new {@name="wizardForm", @id="wizardForm" } ))
{
//form contents
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到MVC 4中的Ajax.BeginForm使用HTML 5.我展示了MVC 3和MVC 4如何呈现下面的表单之间的区别:
MVC 3:
<form action="/Solicitors/Company/New/YourDetails" id="wizardForm" method="post" name="wizardForm" onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, loadingElementId: 'PleaseWait', updateTargetId: 'wizardStep', onBegin: Function.createDelegate(this, isValid), onSuccess: Function.createDelegate(this, SetFocusOnForm) });">
// form contents
</form>
Run Code Online (Sandbox Code Playgroud)
MVC 4:
<form action="/Solicitors/Company/New/LoginDetails" data-ajax="true" data-ajax-begin="isValid" data-ajax-loading="#PleaseWait" data-ajax-mode="replace" data-ajax-success="SetFocusOnForm" data-ajax-update="#wizardStep" id="wizardForm" method="post" name="wizardForm" novalidate="novalidate">
// form contents
</form>
Run Code Online (Sandbox Code Playgroud)
我不知道这是否正确,但假设它是.
然而,问题是没有使用Ajax,只是整页刷新.所以sumat是错的......
问题是:出了什么问题?!
awr*_*ley 12
好的,我已经解决了这个问题.
在MVC 3应用程序中,我在web.config中注释掉了以下内容:
<appSettings>
<add key="webpages:Version" value="1.0" />
<!--<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />-->
</appSettings>
Run Code Online (Sandbox Code Playgroud)
这解释了为什么asp.net mvc 3没有渲染html 5.
在新的mvc 4应用程序中,默认设置有ClientValidationEnbled=true和UnobstrusiveJavaScriptEnabled=true,如下所示:
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
...
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
所以我的应用程序需要包含以下javascript文件:
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
它需要将microsoft*.js文件丢弃,即:
@*<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script>*@
Run Code Online (Sandbox Code Playgroud)
我在阅读@Darin Dimitrov对以下问题的回复后想出了这个问题:
从ASP.NET MVC 3开始,MicrosoftAjax.js,MicrosoftMvcAjax.js和MicrosoftMvcValidation.js是否已过时?
非常感谢达林.答案值得一读,以启发自己已禁用的两个appSettings的含义.