<p> Show me the time in: @Ajax.ActionLink("UTC","GetTime",new { zone = "utc" },new AjaxOptions { UpdateTargetId = "myResults" }) @Ajax.ActionLink("BST",new { zone = "bst" },new AjaxOptions { UpdateTargetId = "myResults" }) @Ajax.ActionLink("MDT",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>
所有我的ajax调用没有工作,直到我更改了这个键在web.config:
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
那我在这篇文章中阅读:http://weblogs.asp.net/owscott/archive/2010/11/17/mvc-3-ajax-redirecting-instead-of-updating-div.aspx
但现在我所有的客户端cide验证不像以前一样工作。
我的问题是:如何使ajax代码工作和客户端验证在同一时间?和什么是关于“UnobtrusiveJavaScriptEnabled”的属性?是它们之间的切换吗?我希望用简单的话更多地了解它。
<add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" />
客户端验证基于jquery.validate.js插件以及来自Microsoft的jquery.validate.unobtrusive.js脚本。当在包含HTML表单的视图中包括这两个脚本时,客户端将根据您在模型上定义的数据注释规则执行验证。当您查看视图生成的HTML源代码时,您会注意到输入字段具有包含验证规则的HTML5 data- *属性。 Microsoft不显眼的验证脚本然后将读取这些规则并配置jquery验证插件。
unobtrusive javascript是不同的。它是基于jquery。当您使用Ajax。* HTML助手(例如Ajax.ActionLink)之一时,在ASP.NET MVC 3中,这些帮助程序还会在相应的锚点上发出HTML5 data- *属性。这些属性然后由Microsoft jquery.unobtrusive-ajax.js脚本解释,您需要包括在您的页面和AJAXify这些链接。所以,例如当你写:
@Ajax.ActionLink("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文件,您可以订阅此链接的点击事件,发送一个AJAX请求到包含在href属性中的url,然后基于data-ajax-mode属性的值替换html一些包含id的容器包含在data-ajax-update属性选择器中。这正是jquery.unobtrusive-ajax.js的作用。它只是它在一个单独的文件,您的标记和JavaScript是独立的,而在以前的版本不是这样。
所以与ASP.NET MVC 1和2相反,在ASP.NET MVC 3中jQuery是默认的javascript框架和HTML助手都是基于它的。所有MicrosoftAjax *脚本不再使用。