当前位置: 首页 > 面试题库 >

为什么设置UnobtrusiveJavaScriptEnabled = true阻止ajax工作?

胡桐
2023-03-14
问题内容

在使用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验证插件。

不客气的javascript是不同的。它基于jquery。当您在ASP.NET MVC
3中使用Ajax.*HTML帮助程序之一(如)时Ajax.ActionLink,这些帮助程序还会data-*在相应的锚点上发出HTML5
属性。然后jquery.unobtrusive-ajax.js,您需要在页面中包含Microsoft
脚本来解释这些属性,并使用AJAXify这些链接。例如,当您编写时:

@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是独立的,而在以前的版本中情况并非如此。

因此,与ASP.NET MVC 1和2相反,在ASP.NET MVC
3中,jQuery是默认的javascript框架,HTML帮助器基于该框架。MicrosoftAjax*不再使用所有脚本。



 类似资料:
  • 问题内容: 我正在尝试通过对象读取命令。为了检查输入语法,我使用了(对于缺少命令的情况)。在许多情况下,它确实可以正常工作,但是现在我有了JavaAPI中描述为“ MAY块并等待输入”的情况。 该方法什么时候阻止,我该如何控制?有趣的是,在块之前有3个案例,它工作得很好。另外,JavaAPI还描述了检查是否存在另一个Input的正确方法,以使该Method 不会产生。 这是我到目前为止所产生的代码

  • 问题内容: 我一直想知道为什么JDBC API提供了自动提交模式()。似乎很吸引人的麻烦只是诱使人们陷入麻烦。我的理论是,仅将其添加到JDBC是为了简化希望创建使用JDBC编辑和运行SQL的工具的供应商的生活。是否有其他原因打开自动提交,还是总是错误? 问题答案: 不幸的是,使用自动提交是特定于数据库的(事务行为也是如此)。我认为,如果您没有全局的程序化交易策略,自动提交可能比仅希望每个人都正确关

  • 我不得不问这是一个好的做法吗?好心地建议使用它的优点和缺点(利弊)。

  • 我已阅读文档。但我仍然不确定何时不需要将其设置为 。在下面的代码中,如果我将其设置为 ,我根本看不到标头。如果我把它留,那么一切都很好。 以下视图调试层次结构将发出警告“宽度和位置不明确”。 我想每当我需要修改代码中的任何内容时,我都必须将设置为。 也许更正确的说法是,如果您需要删除它的所有约束,然后将其设置为< code>false,然后添加您喜欢的内容,在这种情况下,您需要为所有4条边添加约束

  • 问题内容: 我已经阅读了文档。但我仍然不确定何时不需要将其设置为。在下面的代码中,如果将其设置为,则根本看不到标题。如果我将其保留为,那么一切都很好。 View调试层次结构中的以下内容将给出警告“ 宽度 和 位置 不明确”。 我以为只要需要修改代码中的任何内容,都必须设置为。 如果您需要删除其所有约束,然后将其设置为,然后添加所需的内容,则可能是更正确的说法,在这种情况下,您需要为所有四个方面添加

  • 问题内容: 我编写了以下程序: 由于通道事件列表是一个缓冲通道,我想我应该获得100倍的输出“嘿!”,但是它只显示一次。我的错误在哪里? 问题答案: 更新(Go 1.2版或更高版本) 从Go 1.2开始,调度程序基于 抢先式多任务处理 原则。这意味着原始问题(以及下面提供的解决方案)中的问题不再相关。 从Go 1.2发行说明中 调度程序中的抢占 在以前的版本中,永远循环的goroutine可能会使