Skip to content

OTR_FAQPLayer

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

FAQ - P層フレームワーク

概要

P 層フレームワーク(主に ASP.NET Web Forms、Windows Forms)に関する FAQ。
P 層の実装はP層(ASP.NET Web Forms)の実装・P層(Windows Forms)の実装を参照。

詳細

導入前

Q. 複数画面(複数ウィンドウ)の Web アプリに対応しているか?

どのようなパターンでも対応できる。ブラウザ・ウィンドウ別の Session 領域など、複数画面の開発を支援する機能もある(Web Forms)。

Q. クロス・ブラウザに対応しているか?

対応している。ダイアログ表示は、IE 以外では擬似ダイアログ(OK・YES/NO は Floating div、業務モーダルは window.open)で動作する
(ダイアログ表示機能)。

旧 Wiki にあった IE6〜8 時代の制限事項(業務モーダルは IE 限定など)は、現行版では解消されている。

Q. Session タイムアウト時も処理を続行させたい(インターネット系のシステム)。

  • Web Forms の P 層フレームワークは Session を使う方式なので、Session が必須。
  • MVC の P 層フレームワークは、BtoC のインターネット系も想定し、Session を必須としていない。
  • Web Forms で Session ステートレスにしたい場合は、Session タイムアウト検出機能と、Session を継続的に使う機能
    (Session 領域の自動削除、ボタン履歴情報記録、不正操作防止)をすべて OFF にする。
    ただし一時的な利用があるので、Session 自体は ON(sessionState mode="Off" 以外)にしておく。

Q. 負荷分散クラスタで、フェイルオーバー後も業務を続行できるか?

Session の状態を外部(StateServer、SQL Server など)に保持すれば続行できる(状態管理)。

Q. マスタページの利用は必須か?ネストできるか?

  • 必須(P 層フレームワークの定義、Fx 隠しフィールドをマスタページに持つため)。UI 要素は空でもよい。
  • ネストできる(サンプル Aspx/testFxLayerP/nest の testNestMasterScreen.aspx など)。

P 層イベント処理機能(イベントの自動結線)

Q. 対応するコントロールを追加したい。

親クラス2 の addControlEvent(コントロールの取得処理と中継のイベント・ハンドラ)をカスタマイズすれば追加できる(親クラス2 のカスタマイズ)。

Q. 動的に生成したコントロールにイベント・ハンドラを設定したい。

結線はコントロール・ツリーを再帰的に走査して行うので、接頭辞の規約に沿って命名すれば、動的に生成したコントロールにも結線される。

Q. 今回は P 層イベント処理機能を使いたくない。

設定ファイルのコントロールごとの接頭辞を空にすれば、その種類の結線をキャンセルできる。

Q. ユーザ・コントロールやマスタページ上のコントロールはサポートしているか?

サポートしている。ページ側とコントロール名が衝突しないよう、接頭辞などを検討する。

Enter キーでの submit 抑止

ブラウザによって動作が異なる(複数のテキスト入力があるとき、IE は Enter で submit されないが、Chrome / Safari はされる)。
コントロールごとに JavaScript で制御するのがよい(Issue #78)。

トラブルシュート

Q. ログイン画面で Session タイムアウト例外が発生する。

  • P 層フレームワークは Session を使うので、DoS 攻撃が可能な環境のログイン画面には、P 層フレームワークを使わない方がよい場合がある。
  • 画面のコンストラクタで IsNoSession を true にすると、その画面だけボタン履歴・不正操作防止を OFF にでき、this.FxSessionAbandon() と組み合わせて対処できる
    (サンプル Aspx/start/login.aspx.cs)。

Q. 予期せぬ Session タイムアウト例外が発生する。

  • Session を解放するときは this.FxSessionAbandon() を使う(タイムアウト検出用の Cookie も消す)。
  • IIS のアプリケーション・プールのアイドル・タイムアウトにも注意する(タイムアウト値の設計)。

Q. IFRAME の更新後に、親画面を操作できなくなる。

特定のブラウザで親画面の readyState が complete にならず、二重送信防止機能が操作を抑止し続けることがある。
その画面を出力する際に this.Form.Attributes.Remove("onSubmit"); で二重送信防止を一時的にキャンセルする。

Q. 「項目は既に追加されています。辞書のキー: 'SessionAbandonFlag'」という例外が発生する。

エラー処理の中でエラーが発生し、ループしている可能性が高い。エラー処理系(ErrorScreen.aspx.cs、MyBaseController.TransferErrorScreen)のカスタマイズを確認する。
なお、エラー画面(ErrorScreen.aspx)は親クラス2 を継承してはいけない。

その他のトラブル

カスタム・コントロール

Q. グリッド(データバインド・コントロール)内で使えるラジオボタンはあるか?

ある(WebCustomRadioButton)。

Q. カスタム・コントロールに JavaScript を仕込みたい。

ToolboxData に HTML の属性を直書きする、コントロール内部で this.Attributes.Add("onclick", "…") や this.OnClientClick を設定する、などの方法がある。

Q. HTML のタイトルはどこで設定しているか?

親クラス2 の共通初期化(UOC_CMNFormInit)で this.Page.Title に設定している。必要に応じてカスタマイズする。

Windows Forms

Q. リッチクライアントに対応しているか?

P 層フレームワークは Windows Forms のみ。WPF は B 層・D 層だけを使う。

Q. P 層イベント処理機能に対応させたいコントロール・イベントが多すぎる。

親クラス2 をカスタマイズして追加できるが、量が多いなら、.NET 標準のイベント・ハンドラから隠しボタン(HiddenButton)の DoClick を呼び、
Click イベントを発生させれば、ログ出力や例外処理の対象にできる。マルチプル・イベントやマルチキャスト・イベントへの対応にも使える。

Q. MenuItem はサポートされているか?

サポートされている。コントロールの検索方法が他と異なるため、親クラス2 をカスタマイズせず、画面のロード処理(UOC_FormInit)で MenuItem の Click イベントに共通のハンドラを結線する。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally