Visual Studio MVC 4互联网模板& OpenAuth引发JS错误

时间:2013-02-08 00:40:06

标签: asp.net-mvc-4 oauth-2.0

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

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

  1. 创建新的MVC4 Inernet应用程序
  2. 在程序包管理器控制台中执行:update-package
  3. 在AuthConfig.cs文件中取消对OAuthWebSecurity.RegisterGoogleClient()的评论(我认为Google oAuth不需要密钥,因此在AuthConfig.cs文件中取消注释此行会启用它。)
  4. F5运行app
  5. 此时我看到以下错误:

    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. 点击Google按钮
    3. 此时我收到此错误:

      ProtocolException was unhandled by user code
      No OpenID endpoint found
      

2 个答案:

答案 0 :(得分:4)

错误原因和解决方案

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

此方法允许与任何DOM元素相关联的事件存在或将来。 目前用于代替live的方法是方法on

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

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

通过调用live修改对on的来电。

对于on行为,我们碰巧住了on 3个参数: 活动(如直播,将“提交”) 选择器(元素“children”)是基于选择器的,必须始终存在 处理函数(如实时)。

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

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

我将选择器移动到on的第二个参数,并使你成为一个基本的选择器“body”(不是最优的,但我确信总是如此)。

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

对于所有其他生活电话(还有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

答案 1 :(得分:2)

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

请参阅Unobtrusive Ajax stopped working after update jQuery to 1.9.0