- - PR -
フロントコントローラでのポストバックについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-08-03 10:30
自己レスです。
HandlerクラスでのServer.Transfer()をResponse.Redirect()に変更し いったんクライアントからリクエスト要求を受け付けることにより 常時URLをフルパス表示にするようにすると、jsなどのファイルで 正しく動作させることができました。 |
1