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. Google ボタンをクリックします

この時点で、次のエラーが発生します。

ProtocolException was unhandled by user code
No OpenID endpoint found
4

2 に答える 2

4

エラーの原因と解決策

原因は、jQuery live メソッドを使用して ASP.NET MVC で控えめな ajax のサポートを担当している jquery-unobtrusive-ajax.js が原因です。ただし、このメソッドは jQuery 1.7 で廃止され、1.9 で削除されました。

このメソッドは、現在または将来の任意の DOM 要素に関連付けられたイベントを許可しました。current の代わりに使用するliveメソッドは methodonです。

ただし、メソッドは jQuery でより多くの用途があるため、構文は少し異なります。

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

liveへの呼び出しで への呼び出しを変更しますon

onたまたま生きているように振る舞うには、次onの 3 つのパラメーターがあります。 イベント (ライブのように、「サブミット」します) セレクター (要素「子」) は、常に存在しなければならないベースのセレクターです ハンドラー関数 (ライブのように)。

この場合、行は次のようになります。

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

セレクターを の 2 番目のパラメーターに移動し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) { ... }

そして準備完了!これにより、MVC の ajax 機能が目立たなくなり、アプリケーションが正常に動作するようになりました。

翻訳元: 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の目立たないライブラリは更新されておらず、jQuery1.9では機能しません。

jQueryを1.9.0に更新した後、控えめなAjaxが動作を停止したを参照してください。

于 2013-02-08T01:00:24.823 に答える