none
ボタンクリック時にエラーメッセージを表示するには? RRS feed

  • 質問

  • VS2003 Basicで開発中です。

     

    ボタンをクリックした際、ページの入力チェックを行い、

    エラーメッセージを表示しようとしています。

     

    ボタンをクリックした際に、エラーメッセージの種類を識別する値に数値をセットして、

    Response.RedirectでPage_Loadをコールして、

    ここで、ボタンに値に応じたメッセージを表示するようにconfirmを追加してみました。

    ところが、RedirectでPage_Loadは呼ばれているのですが、

    ボタンクリックで設定した値がPage_Loadでクリアされてしまっています。

    なぜなのでしょうか???

     

    Dim msgType as Integer = 0

     

    private void Page_Load(object sender, System.EventArgs e)
    {

      If msgType = 1 Then
        Button1.Attributes["onclick"]  = "return confirm('チェックなし');"
      Else If msgType = 2 Then
        Button1.Attributes["onclick"]  = "return confirm('チェック数が多すぎ');"
      End If
    }


    private void Button1_Click(object sender, System.EventArgs e)
    {
      Dim n as integer

      '・・・処理からnに数値が入る

      If n = 0 Then
        msgType = 1
        Response.Redirect("http://localhost/aaa/webform1.asp");
      Else If n > 2 Then
        msgType = 2
        Response.Redirect("http://localhost/aaa/webform1.asp");
      End If
    }

     

    数値ではなく、stringをボタンクリック処理で設定しても

    結局Page_LoadでNothingになっているので、現象は一緒だと思います。

     

    そもそも、何がしたいかというと、ボタンクリック時に

    状況に応じたエラーメッセージボックスを出したいだけなので

    他に方法があれば、ご教授願えると幸いです。

     

    それから、追加質問ですが、

    Redirectでurlを設定しますが、

    上記のaaaのスタート時に、パスワード認証を行っていたりした場合、

    Redirectすると、再度、認証が必要になる・・・ということはないのでしょうか。

     

    よろしくお願いいたします。

     


     

     

    2007年6月21日 5:39

すべての返信

  • リダイレクトというのは、サーバーがブラウザにお願いをして、ブラウザ自信でページを切り替えてもらう仕組みです。一方、Server.Transferというのは、サーバーの機能でページを切り替えて、切り替えた結果をブラウザに返します。

    ここまでで何となくわかりませんか? リダイレクトによってポストバックの流れが変わってしまっているのです。では、どうやって値を渡すかですが、getで渡したり、session変数を使うなどが考えられます。 ちなみに、ASP.NET2.0であれば、違うページにポストバックすることも可能です。

     

    また、リダイレクトしても、再度、認証する必要はないでしょう。セッションが継続しているからです。

    2007年6月21日 6:23
    モデレータ
  • この流れのままだと、リダイレクトの問題が解決したとしても、チェックした直後にはエラーは表示されず、次にボタンがクリックされたときに前のチェックによるエラーの内容が表示されるようになってしまうと思われます。

    もう少しクライアント側とサーバ側で、どのタイミングで何をしたいのか整理してみたほうがよいのではないでしょうか。

     

    #エラーだったら、その入力領域の前後にエラーメッセージを表示する、とかの流れのほうがつくるの楽なんですけどね。

    2007年6月21日 7:24
  • Sessionを使って、値を設定することが出来ました。

    しかしながら、やってみて気づいたのですが・・・

     

    この方法だと、ボタンがクリックされたときに、リダイレクトしてPage_loadで属性が設定されるので、

    実際、メッセージが表示されるのは次にボタンをクリックした時になりませんか?

    やり方が悪いのか、動作はそうなっています・・・

     

    そのため、メッセージの意味が1つずれて、

    次のボタンクリック時に問題がなければ、エラーメッセージを表示しないのに、

    前のエラーが表示されてしまいます。

     

    サンプルを見てやってみたんですが・・・

    http://www.atmarkit.co.jp/fdotnet/dotnettips/015confirm/confirm.html

     

     

     

     

     

    2007年6月21日 7:27
  • >エラーだったら、その入力領域の前後にエラーメッセージを表示する、とかの流れのほうがつくるの楽なんですけどね。

     

    実は、メッセージウィンドウがうまく出なかったら、そうしてしまおうと思ってました。

    そもそも、Webフォームでは、あまり、こういったメッセージダイアログを表示するのは

    推奨するものではないのでしょうか・・・

     

    2007年6月21日 7:36
  • 通常、ボタンを押した時に確認のメッセージを出すのであれば、サブミットの前です。なので、サブミット前にjavascriptでチェックをして、メッセージを表示することになります。
    もし、データベースを読む必要などがあってサーバー側でしかチェックができないというのであれば、その結果をクライアント側(ブラウザ)にどのように返すかです。 javascriptでメッセージを出したければ、ページのオンロード時に表示するようにjavascriptを仕込めば良いでしょうし、メッセージ用のLabelコントロールを用意しておいて、そこに文字列をセットしても良いでしょう。
    2007年6月21日 8:27
    モデレータ