ランタイムの制限により、古いバージョンの ASP.NET AJAX を使用しています。ASP.NET バリデーターを更新パネル内に配置しても機能しません。これらを機能させるためのトリックはありますか、それとも AJAX ツールキットに付属の ValidatorCallOut コントロールを使用する必要がありますか?
4 に答える
.NET 2.0 のオリジナル リリース (RTM) を実行していると思われます。
2007 年初頭まで、バリデータ コントロールは UpdatePanels と互換性がありませんでした。これは、.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 に更新しない理由はありません (政治的な理由以外にはないと思います)。サービス パックには、重要な修正が含まれています。
幸運を。
@Jonathan Holland: Validators.dll の使用の何が問題になっていますか?
それらは元のクラスを置き換えるため、Microsoft が将来リリースする可能性がある (または既にリリースされている可能性がある) バグやセキュリティ修正、機能強化などを静かにバイパスしています。web.config を注意深く見ないと、パッチをスキップしていることに気付かないかもしれません。
もちろん、それぞれの状況を評価する必要があります。.NET 2.0 RTM の使用に完全に行き詰っている場合は、Validators.dll は何もないよりはましです。
@jmein
実際の問題は、validator クライアント スクリプトが updatePanel 内に配置された場合に機能しないことです (UpdatePanels は、スクリプト ノードではなくテキスト ノードとしてスクリプト ノードを追加する .innerHTML を使用して更新されるため、ブラウザーはそれらを実行しません)。
修正は、この問題を修正する Microsoft によってリリースされたパッチでした。Googleの助けを借りて見つけました。
http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx
何らかの理由でASP.NETバリデーターコントロールの更新されたバージョンを使用できない場合は、検証グループを自分で検証するのが実際には非常に簡単です。必要なのは、を呼び出すことだけです。
Page_ClientValidate("validationGroupName");
次に、PageRequestManagerを使用して、必要に応じて検証を実行できます。
間違いなく更新された検証コントロールを使用するのが道ですが、私はJavaScriptにかなり偏っています;)