- 締切済み
ページ間ポスティングと検証コントロール
ASP.NET2005(C#)の勉強をしているのですが、検証コントロールとページ間ポスティングを利用した際にわからないことがあります。 Button1とTextBox1があるとして、 Button1をクリックした際にTextBox1の必須入力の検証(サーバー側での検証)を行い、正常な場合はButton1のPostBackUrlプロパティに指定したページに遷移し、入力チェックに引っ掛かった場合は、通常のポストバックで現在のページのまま検証コントロールのエラーメッセージを表示させたいのですが、そのようなことは可能でしょうか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
PreviousPage.myValidateでエラーになるのであれば ビルド > WEBサイトのビルド を実行してこのアプリケーションで参照するDLLを構築してみましょう
- redfox63
- ベストアンサー率71% (1325/1856)
> 検証ページ側のクラス内で設定はしているのですが この検証ページと言うのは 呼び出しもとの検証コントロールを設置下ページですよね でなければ『RequiredFieldValidator1』がエラーになりますからね …
- redfox63
- ベストアンサー率71% (1325/1856)
PreviousPageTypeディレクティブのVirtualPathが正しく設定されていないのかもしれません PreviousPage自体は System.Web.UI.Page型としてインプリメント(実装)されています 独自に作成したプロパティは当然 Page型はあずかり知らない訳ですから PreviousPageTypeで指示することになります
- redfox63
- ベストアンサー率71% (1325/1856)
検証コントロールを使う際は ボタンの PostBackUrlで別ページに飛ばすより ボタンのClickイベントで Server.Transferを使ったほうが良いようです Response.Redirectでは 飛び先のページでPureviousPageが使えないのでTransferのほうが使い勝手良いでしょう 呼び出し側のボタンClickイベントで if ( this.IsValid == true ) { Server.Transfer("飛び先URL"); } 呼び出し先のLoadイベントで if ( ( this.IsPostback== false ) && ( this.PreviousPage != null ) ) { TextBox oText = (TextBox)(this.PreviousPage.form. FindControl("TextBox1")); Label1.Text = oText.Text; } と言った具合です
- redfox63
- ベストアンサー率71% (1325/1856)
別ページへのポストバックする場合いろいろと設定が必要なようです まず 検証ページにおいて 検証結果を出力できるプロパティを作成します PostBackされるページのaspxファイルの冒頭で PreviousPageTypeディレクティブを使って呼び出すページを設定します Loadイベントで if ( PreviousPage != null ) { if ( PreviousPage.myValidate == false ) { Server.Transfer("postPageのURL"); } } を記述します 呼び出し側のLoadイベントで if ( PreviousPage != null ) { // Server.Transferで呼び出された時 // 検証コントロールの結果を表示させる Page.Validate(); } 検証コントロール用のプロパティを設定 public bool myValidate { get { return RequiredFieldValidator1.IsValid; } } と言った具合でしょうか 検証をサーバサイドでするなら検証コントロールのEnableClientScriptをFalseに設定するのを忘れずに
お礼
ありがとうございます。 回答してくださった通りに作ってみたのですが 「'System.Web.UI.Page' に 'myValidate' の定義がありません。」 というエラーが出てしまいます。 myValidateプロパティをどのように定義すればよいでしょうか? public bool myValidate { get { return RequiredFieldValidator1.IsValid; } } のように検証ページ側のクラス内で設定はしているのですが...
お礼
ありがとうございます。 実はServer.Transferを使う方法は以前から使用していたのですが、 今回はPostBackUrlを使って実現できないかと思いまして質問を投稿しました。