1

我正在尝试让标准的 Visual Studio 2012 MVC4 Internet 模板和 oAuth 工作,但它不会!

所以这里是重新创建的简单步骤。

  1. 创建新的 MVC4 Inernet 应用程序
  2. 在包管理器控制台中执行:update-package
  3. 在文件 AuthConfig.cs 中取消注释 OAuthWebSecurity.RegisterGoogleClient() (我的印象是 Google oAuth 不需要密钥,因此在 AuthConfig.cs 文件中取消注释这一行将启用它。)
  4. F5 运行应用

此时我看到以下错误:

Error when entering login page:

Unhandled exception at line 115, column 5 in http://localhost:63180/Scripts/jquery.unobtrusive-ajax.js

0x800a01b6 - Microsoft JScript runtime error: Object doesn't support property or method 'live'
  1. 点击主页上的登录链接
  2. 点击谷歌按钮

此时我收到此错误:

ProtocolException was unhandled by user code
No OpenID endpoint found
4

2 回答 2

4

错误原因及解决方法

原因是 jquery-unobtrusive-ajax.js 负责使用 jQuery live 方法在 ASP.NET MVC 中支持不显眼的 ajax。但是这个方法在 jQuery 1.7 中被弃用并且在 1.9 中被移除了。

此方法允许与当前或未来的任何 DOM 元素关联的事件。当前要使用live的方法是 method on

但是语法有点不同,因为该方法在 jQuery 上有更多用途。

$ ("form [data-ajax = true].") live ("submit", function (e) { ... }

使用对 的调用修改对live的调用on

on就像我们碰巧活了3 个参数一样:on事件(比如 live,将“提交”) 一个选择器(元素“children”)是基于选择器的,它必须始终存在 处理函数(比如 live)。

在这种情况下,我们的行看起来像:

$ ("body"). on ("submit", "form [data-ajax = true]", function (e) { ... }

我将选择器移至第二个参数,on并为您制作了一个基本的选择器“body”(不是最优化的,但我确信始终存在)。

这个想法是最后一个函数与form [data-ajax = true]选择器基(主体)内的所有当前和未来类型的元素相关联。

对于所有其他的 live 调用(还有 3 个)进行相同的替换,如下所示:

$ ("body"). on ("click", "form [data-ajax = true]: submit", function (e) { ... }
$ ("body"). on ("click", "a [data-ajax = true]", function (e) { ... }
$ ("body"). on ("click", "form [data-ajax = true] input [type = image]", function (e) { ... }

准备好了!有了这个,我们恢复了 ajax 功能,MVC 不显眼,您的应用程序应该再次正常工作!

翻译自: http: //geeks.ms/blogs/etomas/archive/2013/01/18/jquery-1-9-y-el-unobtrusive-ajax-de-asp-net-mvc.aspx

于 2013-02-08T00:53:59.033 回答
2

NuGet 中不显眼的库尚未更新,并且不适用于 jQuery 1.9。

请参阅将 jQuery 更新到 1.9.0 后 Unobtrusive Ajax 停止工作

于 2013-02-08T01:00:24.823 回答