一尘不染

ASP.NET MVC 4-Ajax.BeginForm和html5

ajax

设置:

我已经将应用程序从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

}
}

渲染:

我注意到MVC 4中的Ajax.BeginForm使用HTML5。我在下面显示了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>

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>

我不知道这是否正确,但假设是正确的。

问题:

但是,问题在于没有使用Ajax,只是刷新了整个页面。所以sumat是错的…

问题:

问题是:怎么了?


阅读 244

收藏
2020-07-26

共1个答案

一尘不染

好,我已经解决了。

在MVC 3应用程序中,我在web.config中注释了以下内容:

<appSettings>
    <add key="webpages:Version" value="1.0" />
    <!--<add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />-->
  </appSettings>

这解释了为什么asp.net mvc 3无法呈现html 5。

在新的mvc
4应用程序中,默认设置为ClientValidationEnbled=trueUnobstrusiveJavaScriptEnabled=true,如下所示:

<appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    ...
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

因此,我的应用程序需要包含以下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>

它需要丢弃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>*@

在阅读@Darin Dimitrov对以下问题的答复后,我想出了这一点:

从ASP.NET MVC
3开始,MicrosoftAjax.js,MicrosoftMvcAjax.js和MicrosoftMvcValidation.js是否已过时?

非常感谢达林。答案值得一读,以启发我自己禁用的两个appSettings的含义。

2020-07-26