【问题标题】:Visual Studio MVC 4 Internet Template & OpenAuth Throws JS ErrorsVisual Studio MVC 4 Internet 模板和 OpenAuth 引发 JS 错误
【发布时间】:2013-02-09 00:22:28
【问题描述】:

我正在尝试让标准 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. 点击 Google 按钮

此时我收到此错误:

ProtocolException was unhandled by user code
No OpenID endpoint found

【问题讨论】:

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


    【解决方案1】:

    错误原因及解决方法

    原因是 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) { ... }
    

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

    对于on 的行为就像我们碰巧生活在on 3 个参数: 事件(如现场,将“提交”) 选择器(元素“子”)是必须始终存在的基于选择器 处理函数(如 live)。

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

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

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

    这个想法是最后一个函数与选择器基(主体)内的所有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

    【讨论】:

    • @da7rutrak 谢谢!我不太擅长管理 SO 的格式化选项。
    【解决方案2】:

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

    见Unobtrusive Ajax stopped working after update jQuery to 1.9.0

    【讨论】:

    • 这修复了实时错误,但现在在尝试使用 google 进行 oauth 时,No Endpoint Found 错误仍然存​​在。此修复程序是否也应该消失?
    • 按照您的步骤,我无法重现该问题。你是如何解决 jQuery 问题的?我手动将 live 替换为 on。在不更新包的情况下尝试一个新项目,看看 Google 登录是否有效。
    • 是的,我发现在不更新任何内容的情况下创建新解决方案似乎可行。我正在寻找一个优雅的解决方案,它将允许更新 jquery 并使 oAuth 保持运行。到目前为止还没有运气! :(
    • 我的防火墙已打开。我可以在项目创建后无需更新任何内容就可以完成这项工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多