在使用MVC3剃须刀做样本时,我写道:
<p> Show me the time in: @Ajax.ActionLink("UTC", "GetTime", new { zone = "utc" }, new AjaxOptions { UpdateTargetId = "myResults" }) @Ajax.ActionLink("BST", "GetTime", new { zone = "bst" }, new AjaxOptions { UpdateTargetId = "myResults" }) @Ajax.ActionLink("MDT", "GetTime", new { zone = "mdt" }, new AjaxOptions { UpdateTargetId = "myResults" }) </p> <div id="myResults" style="border: 2px dotted red; padding: .5em;"> Results will appear here </div> <p> This page was generated at @DateTime.UtcNow.ToString("h:MM:ss tt") (UTC) </p>
在我更改web.config中的此键之前,我的ajax调用均无效:
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
我在这篇文章中阅读过:http : //weblogs.asp.net/owscott/archive/2010/11/17/mvc-3-ajax-redirecting-instead- of-updating- div.aspx 但是现在我的客户端验证了不能像以前那样工作。
我的问题是 :如何使Ajax和客户端验证同时工作?“ UnobtrusiveJavaScriptEnabled”是做什么的?是它们之间的切换吗?我希望以简单的方式了解更多信息。
在ASP.NET MVC 3中,有两件事:客户端验证和不易干扰的javascript,它们由web.config中的相应值控制:
<add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" />
客户端验证基于jquery.validate.js插件以及jquery.validate.unobtrusive.jsMicrosoft脚本。当您在包含HTML表单的视图中包含这两个脚本时,将根据您在模型上定义的数据注释规则执行客户端验证。查看视图的生成的HTML源代码时,您会注意到输入字段具有HTML5 data-*属性,其中包含验证规则。然后,Microsoft的非侵入式验证脚本将读取这些规则并配置jquery验证插件。
jquery.validate.js
jquery.validate.unobtrusive.js
data-*
不客气的javascript是不同的。它基于jquery。当您在ASP.NET MVC 3中使用Ajax.*HTML帮助程序之一(如)时Ajax.ActionLink,这些帮助程序还会data-*在相应的锚点上发出HTML5 属性。然后jquery.unobtrusive-ajax.js,您需要在页面中包含Microsoft 脚本来解释这些属性,并使用AJAXify这些链接。例如,当您编写时:
Ajax.*
Ajax.ActionLink
jquery.unobtrusive-ajax.js
@Ajax.ActionLink("UTC", "GetTime", new { zone = "utc" }, new AjaxOptions { UpdateTargetId = "myResults" })
这将生成以下HTML:
<a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#myResults" href="/Home/GetTime?zone=utc">UTC</a>
如您现在所见,有关如何执行AJAX请求的所有信息都包含在DOM中。因此,您可以有一个单独的javascript文件,您可以在其中订阅click此链接的事件,向href属性中包含的url发送AJAX请求,然后根据属性的值,将data- ajax-mode某些容器的html替换为data-ajax-update属性选择器。而这正是这样jquery.unobtrusive- ajax.js做的。只是它在一个单独的文件中,并且您的标记和javascript是独立的,而在以前的版本中情况并非如此。
click
href
data- ajax-mode
data-ajax-update
jquery.unobtrusive- ajax.js
因此,与ASP.NET MVC 1和2相反,在ASP.NET MVC 3中,jQuery是默认的javascript框架,HTML帮助器基于该框架。MicrosoftAjax*不再使用所有脚本。
MicrosoftAjax*