Visual Studio MVC 4互联网模板和OpenAuth抛出JS错误

问题描述:

我想要获得标准的Visual Studio 2012 MVC4互联网模板和oAuth工作,但它不会!Visual Studio MVC 4互联网模板和OpenAuth抛出JS错误

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

  1. 新建MVC4 Inernet应用
  2. 在包管理器控制台执行:更新包
  3. 取消注释OAuthWebSecurity.RegisterGoogleClient()文件AuthConfig.cs(我的印象是,谷歌的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 

错误和的原因解决方案

原因是,jquery -u nobtrusive-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个参数: 事件(如直播,将“提交”) 选择器(元素“孩子”)是基于选择哪些必须始终存在 处理函数(如生活)。

在这种情况下,我们的产品线是这样的:

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

我搬到选择器的on第二个参数,使你成为基本的选择“身体”(不是最优化的,但远我肯定总有)。

的想法是,最后一个功能与是选择基(体)内的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

+0

@ da7rutrak thanks!即时通讯不太好管理SO的格式化选项。 –

中的NuGet不显眼的库尚未更新,并且不使用jQuery 1.9工作。

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

+0

这修正了实时错误,但是现在当用google尝试oauth时仍然没有发现端点错误。这个修补程序是否应该消失? – ChiliYago

+0

按照您的步骤,我无法重现该问题。你是如何解决jQuery问题的?我用手动替换现场。尝试新的项目而不更新软件包并查看Google登录是否有效。 – Jasen

+0

你在防火墙后面吗? http://stackoverflow.com/questions/5788236/no-openid-endpoint-found – Jasen