- PR -

MaintainScrollPositionOnPostBack と CustomValidator の併用

1
投稿者投稿内容
tokyo_eye
会議室デビュー日: 2003/09/11
投稿数: 12
投稿日時: 2008-01-22 20:03
VS2005 + ASP.NET 2.0(C#)にてWebアプリケーションの開発を行っています。

スクロールが発生する入力ページにて、ポストバック時のページ位置を保持するために、
コード:
MaintainScrollPositionOnPostBack = true;


という設定を行っています。
またページのバリデーションチェックには、ValidationSummaryと、CustomValidatorなどを用いています。
RequiredFieldValidatorなど、サーバ側の処理を必要としないバリデータは、エラー発生時にページの先頭位置が表示され、エラーメッセージが正常に表示されます。

ただし、CustomValidatorのサーバ側での検証を行った後は、MaintainScrollPositionOnPostBack の設定が効いて、検証を起動したコントロールの位置にページ位置が保持されてしまい、エラーメッセージ(ValidationSummary)が画面上表示されない、ということが起きてしまいます。

これを回避しようと、エラー発生時にはスタートアップスクリプトにてページの先頭に戻そうとしましたが、MaintainScrollPositionOnPostBack のスクリプトのほうが後から実行されてしまうため、元の位置に戻ってしまいます。
コード:
if (!Page.IsValid)
{
    Page.ClientScript.RegisterStartupScript(this.GetType(), "scrollToTop", "window.scrollTo(0,0);", true);
}



また、エラー発生時に一時的に MaintainScrollPositionOnPostBack を無効にすれば、エラーメッセージのあるページ先頭が表示されるようになりますが、その画面で次に起こすポストバック時も MaintainScrollPositionOnPostBack が無効になってしまいます。

エラー発生時のみ、ページ先頭を表示するような方法がありましたら、ご教示頂きたいと思います。
長々とすみませんが、どうぞよろしくお願いします。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2008-01-23 07:19
ValidationSummaryをポップアップ表示させてもだめですか?

あとは、CustomValidatorの処理をクライアント側のJavaScriptで行うとか。

このとき、Webサーバーからのデータが必要なときはWebサービス経由で
取得する。

この問題は、
CustomValidatorでフルポストバックさせない方法で検証するしか
回避方法はないかも?



_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
tokyo_eye
会議室デビュー日: 2003/09/11
投稿数: 12
投稿日時: 2008-01-31 22:44
Accessさん、お返事ありがとうございます!

現在はポップアップ表示をしない方向で検討していましたが、他の回避方法だとやや対応のコストが高そうですね。
ポップアップ表示も含めて、もう少し検討してみます。
どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)