DOBON.NETプログラミング道掲示板

■35687 / 親記事)  webformでの制御
  
□投稿者/ イクイノックス 一般人(1回)-(2025/09/24(Wed) 11:34:57)
  • アイコン環境/言語:[Webform、C#、.NetFramework4.8.1] 
    分類:[ASP.NET] 

    通常、「更新」ボタンなどを画面デザインで配置して実装する場合、
    クライアントスクリプトで記述するconfirmメソッドはOnClickイベントで実装すると思います。

    gridviewのAutogenerate系のボタンやコマンドコントロールで「自動的」に実装される「ボタン」は画面デザインの時点ではhtmlソース表示しても記述されてないため、OnClickでの制御ができません。
    そのため、postback後に制御する必要がありますが、入力チェック→alertでメッセージ表示は、サーバー側の処理が終わった後に出すイメージで問題ありませんが、confirmはpostback後にRegisterClientScriptBlockで実行するように処理しても、
    サーバー側での更新処理が全部終わってからメッセージが出力される挙動になるため、確認メッセージの用をなしていません。

    OnClickに該当する処理をpostback前にhtmlソースに書かれてなくても無理やり挙動させる、あるいはpostback後の「更新」「削除」などのイベント処理の冒頭でconfirmを出し、ok:実行、キャンセル:e.cancel=true等で中止
    というような処理をするのは不可能なのでしょうか?
    ご存じの方ご教示ください。

    多分VBでもC#でも同じような処理になると思いますが、
    一応サーバーサイドはC#で記述してます。

マルチポストを報告
違反を報告
引用返信 削除キー/
■35688 / ResNo.1)  Re[1]: webformでの制御
□投稿者/ kiku 一般人(3回)-(2025/09/24(Wed) 15:25:36)
  • アイコンNo35687に返信(イクイノックスさんの記事)
    > そのため、postback後に制御する必要がありますが、入力チェック→alertでメッセージ表示は、サーバー側の処理が終わった後に出すイメージで問題ありませんが、confirmはpostback後にRegisterClientScriptBlockで実行するように処理しても、
    > サーバー側での更新処理が全部終わってからメッセージが出力される挙動になるため、確認メッセージの用をなしていません。

    サーバーサイドの処理を2つに分ければ良いのではないでしょうか?
    1.入力チェックのみを行う処理(入力チェックエラー)
    2.登録のみを行う処理(登録時のエラー)

    当方、WebFormアプリの作成未経験のため、概念的な回答のみになります。
違反を報告
引用返信 削除キー/
■35689 / ResNo.2)  Re[2]: webformでの制御
□投稿者/ イクイノックス 一般人(2回)-(2025/09/24(Wed) 16:05:24)
  • アイコンNo35688に返信(kikuさんの記事)
    > ■No35687に返信(イクイノックスさんの記事)
    >>そのため、postback後に制御する必要がありますが、入力チェック→alertでメッセージ表示は、サーバー側の処理が終わった後に出すイメージで問題ありませんが、confirmはpostback後にRegisterClientScriptBlockで実行するように処理しても、
    >>サーバー側での更新処理が全部終わってからメッセージが出力される挙動になるため、確認メッセージの用をなしていません。
    >
    > サーバーサイドの処理を2つに分ければ良いのではないでしょうか?
    > 1.入力チェックのみを行う処理(入力チェックエラー)
    > 2.登録のみを行う処理(登録時のエラー)
    >
    > 当方、WebFormアプリの作成未経験のため、概念的な回答のみになります。

    1も2もalertなので表示できます。

    問題はconfirmのほうです。
    具体的に言うと、
    「削除」ボタンはWebform側でサーバーサイドで自動的に生成される感じで、htmlで表現されていません。
    なので、「削除」押下→即postback→(ここからサーバーサイド)page_load→grid_RowCommand→grid_RowDeletingの順にイベントが発生します。

    grid_RowCommandでは「新規作成」「更新」、「削除」いずれか発生したか判定できます。page_loadではpostbackしたかどうかしか判定できないようで何ボタンが押されたかわかりません。

    grid_RowCommandで「削除」のときconfirmを出すみたいな処理はできますが、
    それはgrid_RowDeletingの処理、つまり削除処理が実行された後に表示されるので、confirmの操作が反映できません。
    おそらくpage_loadで出せばいけるのかもしれませんが、「削除」であることが判定できないためconfirmを出す処理を組み込めません。

    こんな状況です。
違反を報告
引用返信 削除キー/
■35690 / ResNo.3)  【報告】No35687 の投稿はマルチポストです
□投稿者/ (報告) 一般人(1回)-(2025/09/24(Wed) 16:24:14)
  • アイコンNo35687 の投稿はマルチポストです。もし元記事の投稿者にマルチポストの心当たりがない場合は、すぐに返信でお知らせください。

    ●マルチポストされている場所
    https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=31022

    ----------
    この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのルールについて」をお読みください。

    ●書き込みのルールについて
    https://dobon.net/vb/bbs/index.html
違反を報告
引用返信 削除キー/
■35691 / ResNo.4)  Re[3]: webformでの制御
□投稿者/ kiku 一般人(4回)-(2025/09/24(Wed) 17:12:59)
  • アイコンNo35689に返信(イクイノックスさんの記事)
    > ■No35688に返信(kikuさんの記事)
    >>■No35687に返信(イクイノックスさんの記事)
    > 問題はconfirmのほうです。
    > 具体的に言うと、
    > 「削除」ボタンはWebform側でサーバーサイドで自動的に生成される感じで、htmlで表現されていません。
    > なので、「削除」押下→即postback→(ここからサーバーサイド)page_load→grid_RowCommand→grid_RowDeletingの順にイベントが発生します。
    >
    > grid_RowCommandでは「新規作成」「更新」、「削除」いずれか発生したか判定できます。page_loadではpostbackしたかどうかしか判定できないようで何ボタンが押されたかわかりません。

    grid_RowCommand処理を下記にしたらできませんか?
    1.grid_RowCommandで「削除」ボタンが押下されたか判断。
    2.削除ボタンが押されたら、削除ボタン用入力チェック画面へ遷移。
    3.削除ボタン用入力チェック画面では、confirmのみ表示する。
    4.confirmでOKなら、削除処理画面へ遷移。
    5.confirmでcancelなら、元の画面へ遷移し、削除された表を表示。
違反を報告
引用返信 削除キー/
■35692 / ResNo.5)  Re[4]: webformでの制御
□投稿者/ イクイノックス 一般人(3回)-(2025/10/02(Thu) 11:28:07)
  • アイコンNo35691に返信(kikuさんの記事)
    > ■No35689に返信(イクイノックスさんの記事)
    >>■No35688に返信(kikuさんの記事)
    > >>■No35687に返信(イクイノックスさんの記事)
    >>問題はconfirmのほうです。
    >>具体的に言うと、
    >>「削除」ボタンはWebform側でサーバーサイドで自動的に生成される感じで、htmlで表現されていません。
    >>なので、「削除」押下→即postback→(ここからサーバーサイド)page_load→grid_RowCommand→grid_RowDeletingの順にイベントが発生します。
    >>
    >>grid_RowCommandでは「新規作成」「更新」、「削除」いずれか発生したか判定できます。page_loadではpostbackしたかどうかしか判定できないようで何ボタンが押されたかわかりません。
    >
    > grid_RowCommand処理を下記にしたらできませんか?
    > 1.grid_RowCommandで「削除」ボタンが押下されたか判断。
    > 2.削除ボタンが押されたら、削除ボタン用入力チェック画面へ遷移。
    > 3.削除ボタン用入力チェック画面では、confirmのみ表示する。
    > 4.confirmでOKなら、削除処理画面へ遷移。
    > 5.confirmでcancelなら、元の画面へ遷移し、削除された表を表示。

    それだと処理が複雑になりすぎるので、
    AutoGenerateDeleteボタンによる実装を断念し、

    テンプレートフィールドのアイテムとしてボタンを定義して、
    1.OnClientClickでConfirm表示(returnを返す形)
    2.CommandNameプロパティーをDeleteに設定

    これで戻り値がfalseの時は処理中止、trueの時はgrid_RowDeleting発動(=行削除実行)となります。

    結局、AutoGenerateDeleteボタンだと即postbackになるようにロジックが自動生成してしまうので、grid_RowCommandの時点では手遅れ(page_loadが先に発生してしまうので)、なのでpostback前にConfirmのように処理分岐が必要なJSの処理実行するには上記のような方法しかないことがわかりました。

    即postbackに必ずなってしまう使用がいまいちとは思いつつ、最早WebformはCore系で廃止されているため、文句言っても仕様改善は期待できません。
    テンプレートフィールドを使うのが無難と判断しました。




解決み!
違反を報告
引用返信 削除キー/



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/


- Child Tree -