2008-08-28 21 views
12

ランタイムの制限により、古いバージョンのASP.NET AJAXを使用しています。アップデートパネル内にASP.NET Validatorを配置することができません。これらの作業を行うには、トリックがありますか、AJAXツールキットに付属しているValidatorCallOutコントロールを使用する必要がありますか?UpdatePanel内のASP.NETバリデータ

@jmein

答えて

21

私はあなたが.NET 2.0の元のリリース(RTM)を実行している疑いがあります。

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

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

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

すぐに問題を回避するために、MicrosoftはValidators.DLLと呼ばれる新しいDLLにバリデーションクラスのパッチバージョンをリリースし、ASP.NETに実際のクラスの代わりにこれらのクラスを使用するよう指示する方法について説明しました。そのDLL名のGoogleをお使いの場合は、さらに詳しい情報が必要です。 This blog postも参照してください。

これはストップギャグ対策であり、 は使用しないでください。 可能であれば、これを避けてください。

.NET 2.0 SP1では、問題の実際の解決策がまもなく発生しました。マイクロソフトではSP1でスクリプトを登録する新しいメカニズムを導入し、古いバリデーションの代わりにそのメカニズムを使用するように実際のバリデータクラスを変更しました。

私はあなたに変更に関するいくつかの詳細を与えることを許可しなさい:

伝統的に、あなたは、このようなPage.RegisterStartupScript()とPage.RegisterClientScriptBlock()などのページの方法を介してスクリプトを登録することになりました。問題は、これらのメソッドが拡張性のために設計されておらず、UpdatePanelがこれらの呼び出しを監視する方法がないことです。

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

インストールを.NET 2.0 SP1にアップデートしない理由は(政治以外の理由はありません)サービスパックには重要な修正が含まれています。

幸運。

+0

ありがとう!私のサーバーの1台がこの動作を示していましたが、実際にはsp1が見つかりませんでした。 – edosoft

2

実際には問題はのUpdatePanelの内部に配置されたとき、バリのクライアントスクリプトのが動作しないということである(UpdatePanelsはそう、テキストノードではなく、スクリプトノードとしてスクリプトノードを追加.innerHTMLを、使用してリフレッシュブラウザはそれらを実行しません)。

修正プログラムは、この問題を修正するマイクロソフトでリリースされた修正プログラムです。私はGoogleの助けを借りてそれを見つけました。

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

3

@Jonathan Holland:Validators.dllを使用すると何が問題になりますか?

マイクロソフトが今後リリースするかもしれない(または既にリリースされている可能性のある)バグやセキュリティ修正、拡張などは、元のクラスに置き換わるので、静かにバイパスしています。 web.configを注意深く見ていない限り、パッチをスキップしていることに気づかないかもしれません。

もちろん、それぞれの状況を評価する必要があります。 .NET 2.0 RTMを使用している場合、Validators.dllは何もないより優れています。

-1

あなたはASP.NETの検証コントロールのudpatedバージョンを使用することができない、これまでの理由は、検証グループを自分で検証するために、実際には非常に簡単である何、あなたがする必要があるすべては、その後のコール

Page_ClientValidate("validationGroupName"); 

あるため場合PageRequestManagerを使用して、必要に応じて検証を実行することができます。

更新された検証コントロールを使用する方法がありますが、私はJavaScriptの一部です。

関連する問題