質問

実行時の制限のため、古いバージョンの ASP.NET AJAX を使用しています。更新パネル内に ASP.NET バリデータを配置しても機能しません。これらを機能させるためのトリックはありますか、それとも AJAX ツールキットに付属の ValidatorCallOut コントロールを使用する必要がありますか?

役に立ちましたか?

解決

.NET 2.0 のオリジナル リリース (RTM) を実行していると思われます。

2007 年初頭まで、バリデータ コントロールは UpdatePanel と互換性がありませんでした。この問題は、.NET Framework の SP1 で解決されました。

問題の原因は、UpdatePanel がページ内のマークアップの変更を検出できるものの、スクリプトを正しく追跡する方法がないことです。バリデーターはスクリプトに大きく依存します。部分的なポストバック中に、スクリプトは吹き飛ばされるか、更新されないか、または実行されるべきときに実行されません。

初期のベータ版では、MS は UpdatePanel に次のことを試みさせました。 推測 どのスクリプトを再レンダリングまたは実行する必要があるか。それはあまりうまく機能せず、彼らはそれを取り出さなければならなかった。

差し迫った問題を回避するために、Microsoft は Validators.DLL と呼ばれる新しい DLL でバリデーター クラスのパッチを適用したバージョンをリリースし、ASP.NET に実際のクラスの代わりにこれらのクラスを使用するように指示する方法を提供しました。その DLL 名を Google で検索すると、さらに詳しい情報が見つかるはずです。こちらも参照 このブログ投稿.

これは一時しのぎの措置でした。 使わないでください できれば避けてください.

この問題に対する本当の解決策は、その直後の .NET 2.0 SP1 で実現されました。Microsoft は、SP1 でスクリプトを登録するための新しいメカニズムを導入し、古いメカニズムの代わりにそのメカニズムを使用するように実際のバリデーター クラスを変更しました。

変更点について詳しく説明します。

従来は、Page.RegisterStartupScript() や Page.RegisterClientScriptBlock() などの Page メソッドを介してスクリプトを登録する必要がありました。問題は、これらのメソッドが拡張性を考慮して設計されておらず、UpdatePanel にはそれらの呼び出しを監視する方法がないことです。

SP1 では、ページに Page.ClientScripts という新しいプロパティ オブジェクトがあります。このオブジェクトには、元のスクリプトと同等の (そしてある意味ではより優れた) スクリプトを登録するメソッドがあります。また、UpdatePanel はこれらの呼び出しを監視できるため、必要に応じてメソッドを再レンダリングまたは呼び出します。古い RegisterStartupScript() など。メソッドは非推奨になりました。これらは引き続き動作しますが、UpdatePanel 内では動作しません。

インストールを .NET 2.0 SP1 に更新しない理由は (おそらく政治以外に) ありません。Service Pack には重要な修正が含まれています。

幸運を。

他のヒント

@ジョナサン・ホランド:Validators.dll を使用すると何が問題になりますか?

これらは元のクラスを置き換えるため、バグやセキュリティ修正、拡張機能などを密かにバイパスすることになります。Microsoft が将来リリースする可能性があります (またはすでにリリースされている可能性があります)。web.config を注意深く確認しない限り、パッチをスキップしていることに気づかない可能性があります。

もちろん、それぞれの状況を評価する必要があります。.NET 2.0 RTM の使用にどうしても行き詰まっている場合は、Validators.dll を使用しないよりは良いでしょう。

@jmein

実際の問題は、Validator クライアント スクリプトが updatePanel 内に配置された場合に機能しないことです (UpdatePanels は .innerHTML を使用して更新され、スクリプト ノードをスクリプト ノードではなくテキスト ノードとして追加するため、ブラウザーはスクリプト ノードを実行しません)。

この修正は、この問題を修正するマイクロソフトによってリリースされたパッチでした。Googleの助けを借りて見つけました。

http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx

何らかの理由で、更新されたバージョンの ASP.NET バリデーター コントロールを使用できない場合でも、実際に自分で検証グループを検証するのは非常に簡単です。必要なのは、次のコマンドを呼び出すだけです。

Page_ClientValidate("validationGroupName");

その後、必要に応じて PageRequestManager を使用して検証を実行できます。

更新された検証コントロールを使用するのが最善の方法であることは間違いありませんが、私は JavaScript にかなり偏っています ;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top