- PR -

フロントコントローラでのポストバックについて

1
投稿者投稿内容
ぴーたー
会議室デビュー日: 2007/01/30
投稿数: 9
投稿日時: 2007-08-02 11:54
フロントコントローラでのポストバックについて

お世話になります。

フロントコントローラを「参照元記事」に載せたページを参考にして試しているのですが
フロントコントローラの場合ポストバックはどう扱っていいかがわかりません。

・web.configのハンドラには以下のようにしています。
<httpHandlers>
<add verb="*" path="*.control" type="Handler,Handler"/>

・フォルダ構成はこんな感じです。
 a.control
 web.config
 aspx
  +- a.aspx
  +- b.aspx
 js
  +- a.js
 img
  +- a.jpg

・a.aspxはテキストボックスとボタンを貼り付けます。
 ボタン ID = btn
 テキストボックス ID = txtName
 
この状態で
(1)
通常のポストバックをさせたときにa.aspxへのポストバックなので<httpHandlers>で定義されているハンドラを通らず
そのままa.aspxへポストバックされテキストボックスに入力された値は、自動的に復元され表示される。
ポストバック前はブラウザのURLには〜/a.controlとなりますが
ポストバック後はURLの表示が〜/aspx/a.aspxになる。

URLが変わっているからかjsファイルなどを相対パスで読み込んでいる場合に読み込みできなくなってしまう。
フロントコントローラでのポストバックはこういうもので、jsファイルや画像ファイルなどは
相対パスではなく絶対パスで書くものなのでしょうか。

(2)
コントローラを通すためにボタンのPostBackUrlプロパティにa.control?NEXTPAGE=bにし
コントローラにポストバックさせると、コントローラ側でNEXTPAGEを判定して
b.aspxにserver.Transfer()させます。

このときb.aspxでa.aspxのテキストボックスの値を参照する方法がわかりません。
PostBackUrlを指定した場合は、Page.PreviousPage.FindControl()で前のページのコントロールから
値を取得できるとありますが、sever.Transfer()を使用しているためかPreviousPageがnullになります。
試していませんが、コントローラの中でPage.PreviousPageを更新できるのでしょうか。

Request.Formに値はありますが、Request.Formのキー名がctl00$content$txtNameになってしまい
Request.Formから値を取得するにも、ctl00$content$が頭についているため、自動的に戻すことが難しい感じがします。

a.aspxでNameValueCollectionなどにID,valueで値を保存し、Sessionに格納して次のページに渡すということも考えてみたのですが
ListBoxなど複数選択できるコントロールの場合に困りそうかなと思いました。


フロントコントローラの基本的な使い方が間違っているんでしょうか・・・?


[ メッセージ編集済み 編集者: ぴーたー 編集日時 2007-08-02 13:29 ]
ぴーたー
会議室デビュー日: 2007/01/30
投稿数: 9
投稿日時: 2007-08-03 10:30
自己レスです。
HandlerクラスでのServer.Transfer()をResponse.Redirect()に変更し
いったんクライアントからリクエスト要求を受け付けることにより
常時URLをフルパス表示にするようにすると、jsなどのファイルで
正しく動作させることができました。
1

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