• 締切済み

ページ間ポスティングと検証コントロール

ASP.NET2005(C#)の勉強をしているのですが、検証コントロールとページ間ポスティングを利用した際にわからないことがあります。 Button1とTextBox1があるとして、 Button1をクリックした際にTextBox1の必須入力の検証(サーバー側での検証)を行い、正常な場合はButton1のPostBackUrlプロパティに指定したページに遷移し、入力チェックに引っ掛かった場合は、通常のポストバックで現在のページのまま検証コントロールのエラーメッセージを表示させたいのですが、そのようなことは可能でしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

PreviousPage.myValidateでエラーになるのであれば ビルド > WEBサイトのビルド を実行してこのアプリケーションで参照するDLLを構築してみましょう

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

> 検証ページ側のクラス内で設定はしているのですが この検証ページと言うのは 呼び出しもとの検証コントロールを設置下ページですよね でなければ『RequiredFieldValidator1』がエラーになりますからね …

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

PreviousPageTypeディレクティブのVirtualPathが正しく設定されていないのかもしれません PreviousPage自体は System.Web.UI.Page型としてインプリメント(実装)されています 独自に作成したプロパティは当然 Page型はあずかり知らない訳ですから PreviousPageTypeで指示することになります

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

検証コントロールを使う際は ボタンの 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;   } と言った具合です

dotnet20
質問者

お礼

ありがとうございます。 実はServer.Transferを使う方法は以前から使用していたのですが、 今回はPostBackUrlを使って実現できないかと思いまして質問を投稿しました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

別ページへのポストバックする場合いろいろと設定が必要なようです まず 検証ページにおいて 検証結果を出力できるプロパティを作成します 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に設定するのを忘れずに

dotnet20
質問者

お礼

ありがとうございます。 回答してくださった通りに作ってみたのですが 「'System.Web.UI.Page' に 'myValidate' の定義がありません。」 というエラーが出てしまいます。 myValidateプロパティをどのように定義すればよいでしょうか? public bool myValidate   {     get     {       return RequiredFieldValidator1.IsValid;     }   } のように検証ページ側のクラス内で設定はしているのですが...

関連するQ&A