- PR -

[ASP.NET] 検証コントロールとJavaScriptの優先順

投稿者投稿内容
ドコモダケ
会議室デビュー日: 2006/10/08
投稿数: 11
投稿日時: 2006-10-08 23:11
はじめまして。
VisualStudio2003でASP.NETの勉強をしております。

入力フォームを表示し、登録ボタンを押したときに
検証コントロールで各コントロールの入力値をチェックし
ポップアップにて警告を出すとこまでは成功したのですが
最後に「登録してよろしいですか?」というポップアップも
出したいと思い

Me.Button1.Attributes.Add("onclick", "return confirm('よろしいですか?');")

と書いてみたのですが、これが先に機能してしまい、検証コントロールの
ポップアップが動かなくなりました。

希望としては

検証コントロール(クライアント)のAlertっぽいポップアップ
     ↓
.Attributes.Addで足した「よろしいですか?」ポップアップ(confirm)
     ↓
検証コントロール(サーバ)

が実現できるとうれしいのですが・・・。

ご存知の方がいらっしゃいましたらご教授いただけるとうれしいです。
よろしくお願いいたします。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-10-09 05:25
以下のコードが参考になるかと・・・

コード:
function confirmOrder(msg) {
  if (typeof(Page_ClientValidate) != 'function' ||  Page_ClientValidate()) {
    return confirm(msg);		
  } 
  else {
    return false;
  }
}

<span onclick="return confirmOrder('注文してよろしいですか?');">
  <asp:Button id="btnOrder" runat="server" 
    Text="注文"
    OnClick="btnOrder_Click" />
</span>  



↓検証コントロールでエラーがないときのみ確認のメッセージを表示する
http://www.friendlysw.com/aspnet/Articles/Goto.aspx?id=030530-4

数量が未入力の状態で[注文]ボタンをクリックしても確認メッセージが表示されません。エラーがないときのみ確認メッセージを表示します。

_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
ドコモダケ
会議室デビュー日: 2006/10/08
投稿数: 11
投稿日時: 2006-10-09 10:10
Access様

サンプルソースまで提供していただきありがとうございます。
おかげさまで実現することができました。

ひとつ気になるところがありまして、私はサマリコントロールを

showsummary="false" showmessagebox="True"

にしているのですが、検証エラー時のポップアップが2回出てくるように
なってしまいました(OKをクリックすると同じものがもう一回表示)

これもなにか回避策があるのでしょうか?

聞いてばかりで申し訳ありませんが、ご存知でしたらご教授願います。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-10-10 06:28
引用:

検証エラー時のポップアップが2回出てくるように
なってしまいました(OKをクリックすると同じものがもう一回表示)

これもなにか回避策があるのでしょうか?


ButtonにCausesValidation="False"を追加してください。

コード:
  <asp:Button id="btnOrder" runat="server" 
    Text="注文" 
    CausesValidation="False"
    OnClick="btnOrder_Click" />


_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
ドコモダケ
会議室デビュー日: 2006/10/08
投稿数: 11
投稿日時: 2006-10-10 12:58
Access様

完璧です!教えて頂いた方法で、無事処理を実現することが出来ました。

ボタンのCausesValidationを"False"すると、ボタンクリック時に
評価が送出されないと思っていたのですが、<span>のonclickのほうで
送出されているんですね。勉強になりました。

本当にありがとうございました。


ドコモダケ
会議室デビュー日: 2006/10/08
投稿数: 11
投稿日時: 2006-10-10 21:15
たびたび申し訳ございません。

CausesValidation=Falseにして動作確認後
イベント側でPage.IsValidのチェックを使用としたら

------------------------------------------------------------------------
Page.IsValid は、評価がなされるまで呼び出せません。
コントロールのイベント ハンドラで、CausesValidation=True 設定で、
または Page.Validate の呼び出しの後で、クエリーされなければなりません。
------------------------------------------------------------------------

というメッセージが出てしまいました。

やはりボタンの評価を送出しないとサーバ側でのチェックは出来ないのですね。
ポップアップはあきらめて、サマリを表示させるスペースを設けることにします。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-10-11 05:29
引用:

Page.IsValid は、評価がなされるまで呼び出せません。
コントロールのイベント ハンドラで、CausesValidation=True 設定で、
または Page.Validate の呼び出しの後で、クエリーされなければなりません。

というメッセージが出てしまいました。


Page.IsValidの前にPage.Validate()メソッドを追加してください。

コード:
  Protected Sub btnOrder_Click(...)
    Page.Validate()
    If Page.IsValid Then
      lblMessage.Text = "Ordered"
    End If
  End Sub



_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
ドコモダケ
会議室デビュー日: 2006/10/08
投稿数: 11
投稿日時: 2006-10-11 09:48
Access様

本当に何から何まで教えていただいて感謝してます。

教えていただきました方法で処理のほうも無事通りました。

出来ないからあきらめるのではなく、もう少し調べるようにしないと
いけないですね。反省します。

ありがとうございました。

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