none
HtmlFormコントロールのaction属性 RRS feed

  • 質問

  • お世話になります。

    ASP.net3.5を使用しております。

    基本的に.netでサーバーコントロールを利用する場合は、デフォルトでidとrunatのみが指定されたHtmlFormを配置するかと思います。
    .netでは基本的にポストバックする利用法だと思いますので、クライアントに送信されるformタグには「自分自身」がactionに自動設定されると思います

    もし、http://www.hoge.com/111.aspx に対して クエリーパラメーターを追加して表示した場合、

     例)http://www.hoge.com/111.aspx?param=huga

    formのactionにはパラメーター付きのURLが設定されてしまいますが(http://www.hoge.com/111.aspx?param=huga)、パラメーター無しのURLを自動設定してくれるような設定等はありますでしょうか?
    HtmlFormコントロールのドキュメントを見ましたがそれらしきメンバーが存在しませんでした・・・

    質問がうまく伝わっているか不安ですがよろしくお願いいたします。
    2009年2月12日 2:16

回答

  • 了解しました。私の理解力が無かったようです・・・

    さて、以下が参考になると思います。

    コントロールアダプタを利用した HTML の書き換え
    http://d.hatena.ne.jp/ladybug/20070314
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク sk7474 2009年2月19日 9:17
    2009年2月12日 6:48
    モデレータ
  •  

    > base.aspxからのリンク遷移で111.aspxを表示した際にURLがパラメーター付きなのは
    > 当たり前なので問題無いのですが、その次にボタンをクリックしてポストバックで自
    > 分自身を再表示した際にもパラメーターが付加されているのは気持ち悪いな・・・と

    クエリ文字列なしではきちんと表示できないから、ポストバックで再表示する際もクエ
    リ文字列は必要なのでは?

    ちなみに、trapemiya さんが紹介されていたサイトのコードで value を設定するとこ
    ろを以下のようにすると、ポストバックして再表示したときはブラウザのアドレスバーには
    クエリ文字列は表示されなくなると思います。

    value = HttpContext.Current.Request.FilePath;

    でも、ポストバックして再表示したときはクエリ文字列は取得できません。それで画面は
    期待したとおりに表示されますか?

    • 回答としてマーク sk7474 2009年2月19日 9:15
    2009年2月12日 15:09
  • パラメタクエリーがなくてもPostBackがうまくいくつくりにしているのであれば、base.aspxから111.aspxの呼び出しもその方法を使ってみては如何でしょうか。
    または、簡単な方法としてはSessionつかってbase.aspxからの呼び出し時にSessionにhugaと設定してから111.aspx呼び出すとかが考えられます。もしかしたら、そのためにはbase.aspxから111.aspxへの呼び出しは直接aタグではなくASP.NETコントロールにしてコード側で111.aspxを呼び出さないといけないかも知れませんが。

    「基本的に.netでサーバーコントロールを利用する場合は、デフォルトでidとrunatのみが指定されたHtmlFormを配置」
    なのではなく
    「基本的に.netでサーバーコントロールを利用する場合は、ASP.NETコントロールを配置」

    http://blogs.wankuma.com/hatsune/
    • 回答としてマーク sk7474 2009年2月19日 9:16
    2009年2月13日 3:22

すべての返信

  • ご質問の内容がはっきりわからないのですが、クエリーパラメーターを表示したくないのであれば、何のためにクエリーパラメーターを追加されているのでしょうか? クエリーパラメーターを追加するということは、それがURL部分に表示されなければ意味がないように思うのですが・・・


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年2月12日 2:53
    モデレータ
  • 返信ありがとうございます。

    やはり私の説明が下手でしたねw

    例として

    ・111.aspx
     ボタン系のコントロールが配置してある
     ↑ボタンをクリックするとポストバックで自分自身(111.aspx)が表示される
    ・base.aspx
     111.aspxへのリンク(aタグ)が配置してある
     111.aspxへのリンクにはクエリーパラメーターが付加されている(param=huga)
      ↑リンクはHyperLinkコントロールなどではなく直接aタグが記載されている

    この前提条件で

    1. base.aspx上のリンクをクリックする
    2. 111.aspxが表示されるがブラウザのURL欄には 111.aspx?param=hugaと表示される

    ここまでは問題なし

    3. 表示された111.aspxのHTMLソースを見るとformタグのactionが 111.aspx?param=huga となっている
    4. 表示された111.aspx上でボタンをクリックする
    5. ポストバックした際のURLは 111.aspx?param=huga となる
        ↑3番の時点でactionのURLがそうなっているので当たり前 

    つまり、2の時点で111.aspxファイルの出力HTMLをASPがレンダリングする際に、コールされたURLを、formタグのaction属性としてセットしているのだろうと思います。
    これはこれでHtmlFormコントロールの仕様であって問題ではないと思いますが、今回の私の質問は

     ・レンダリングするformのactionをパラメーター無しの状態でセットしてほしい
     ・そのような設定が存在するか

    という事をお伺いしたかったのです。


    base.aspxからのリンク遷移で111.aspxを表示した際にURLがパラメーター付きなのは当たり前なので問題無いのですが、その次にボタンをクリックしてポストバックで自分自身を再表示した際にもパラメーターが付加されているのは気持ち悪いな・・・と


    うまく説明できてるでしょうか?
    2009年2月12日 5:57
  • 了解しました。私の理解力が無かったようです・・・

    さて、以下が参考になると思います。

    コントロールアダプタを利用した HTML の書き換え
    http://d.hatena.ne.jp/ladybug/20070314
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク sk7474 2009年2月19日 9:17
    2009年2月12日 6:48
    モデレータ
  • 情報ありがとうございます。

    設定の一つとして簡単に変更できるようなものではないのですねW

    拝見したサイトを元に試してみましたが、あいかわらずaction値にはパラメーターが付加されたままでした・・・

    .netのバージョン(当方は3.5)や、VisualStudio上の簡易WEBサーバーで試したからか・・・というのもあるかもしれません。
    少しだけデバッグモードで中身をステップ実行しましたが・・・わかりません(笑)

    いずれ時間を用意して詳細を確認してみようと思います。

    ありがとうございました。
    2009年2月12日 8:30
  •  

    > base.aspxからのリンク遷移で111.aspxを表示した際にURLがパラメーター付きなのは
    > 当たり前なので問題無いのですが、その次にボタンをクリックしてポストバックで自
    > 分自身を再表示した際にもパラメーターが付加されているのは気持ち悪いな・・・と

    クエリ文字列なしではきちんと表示できないから、ポストバックで再表示する際もクエ
    リ文字列は必要なのでは?

    ちなみに、trapemiya さんが紹介されていたサイトのコードで value を設定するとこ
    ろを以下のようにすると、ポストバックして再表示したときはブラウザのアドレスバーには
    クエリ文字列は表示されなくなると思います。

    value = HttpContext.Current.Request.FilePath;

    でも、ポストバックして再表示したときはクエリ文字列は取得できません。それで画面は
    期待したとおりに表示されますか?

    • 回答としてマーク sk7474 2009年2月19日 9:15
    2009年2月12日 15:09
  • > 当たり前なので問題無いのですが、その次にボタンをクリックしてポストバックで自
    > 分自身を再表示した際にもパラメーターが付加されているのは気持ち悪いな・・・と

    > base.aspxからのリンク遷移で111.aspxを表示した際にURLがパラメーター付きなのは

    クエリ文字列なしではきちんと表示できないから、ポストバックで再表示する際もクエ
    リ文字列は必要なのでは?


    そうですね、111.aspxを表示するためにパラメーターが必要ですが、いったん111.aspxを表示してからはPOSTデータで受け渡しをしたい・・・とか、FORMでPOSTしてるのにクエリーパラメーターが付加されているのが気持ち悪いとか、ある意味で好みの問題かな?と思いますw
    もちろんポストバックやその後の遷移に支障がないような実装にはしてあります。
    ご心配ありがとうございます

    また、URLを書き直すTIPSの件はうまくいきました。
    ありがとうございます!
    2009年2月13日 1:21
  • パラメタクエリーがなくてもPostBackがうまくいくつくりにしているのであれば、base.aspxから111.aspxの呼び出しもその方法を使ってみては如何でしょうか。
    または、簡単な方法としてはSessionつかってbase.aspxからの呼び出し時にSessionにhugaと設定してから111.aspx呼び出すとかが考えられます。もしかしたら、そのためにはbase.aspxから111.aspxへの呼び出しは直接aタグではなくASP.NETコントロールにしてコード側で111.aspxを呼び出さないといけないかも知れませんが。

    「基本的に.netでサーバーコントロールを利用する場合は、デフォルトでidとrunatのみが指定されたHtmlFormを配置」
    なのではなく
    「基本的に.netでサーバーコントロールを利用する場合は、ASP.NETコントロールを配置」

    http://blogs.wankuma.com/hatsune/
    • 回答としてマーク sk7474 2009年2月19日 9:16
    2009年2月13日 3:22
  •  

    > もちろんポストバックやその後の遷移に支障がないような
    > 実装にはしてあります。

    どのように対処されているのでしょうか? 差し障りなければ
    教えていただけると幸いです。

    クエリ文字列のデータを ViewState に保存という手段が思い
    浮かびますが、それをするくらいならクエリ文字列など使わず
    に最初から Session を使うようにしたほうが良く、あまりい
    い方法はなさそうに思うのですが・・・

    2009年2月13日 12:18
  • こんにちは。中川俊輔です。

    皆様、回答ありがとうございます。

    一穂さん、フォーラムのご利用ありがとうございます。
    勝手ながら、有用な情報と思われる回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    マイクロソフト株式会社 フォーラム オペレータ 中川 俊輔
    2009年2月19日 9:19