1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【備忘録】.aspxのページにはformタグを一つしか置けないワケ

Last updated at Posted at 2019-01-21

こんにちはtsuttieです(*'▽')
aspxのページにformタグを一つ以上置けないわけを考えましたので備忘録として残します。

#1. 注意

あくまで「そうじゃないかな・・・」という予想なので、間違えているかもしれません。
もっと多くの理由があるかもしれません。もし、ご指摘がありましたらコメントいただけると幸いです。

#2. 2つ以上のタグを置くと・・・

2つ以上のformタグを設定すると、IDは違っても以下のエラーが出力されます。

<head runat="server">
    <title>あああ</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <p><input type="file" name="test" id="test" runat="server" /></p>
            <p><asp:Button ID="Button" runat="server" Text="send" OnClick="Button_Click"/></p>
        </div>
    </form>
    <form id="form2" runat="server">
        <div>
            <p><input type="file" name="test" id="test2" runat="server" /></p>
            <p><asp:Button ID="Button2" runat="server" Text="send" OnClick="Button2_Click"/></p>
        </div>
    </form>
</body>

1 つのページには、1 つのサーバー側 Form タグのみを指定できます。


OH…まぁ一応知っていたのですが。。。
何故なのだろう。とここで疑問。
とりあえずformを一つ消してリクエストボディを確認してみました。

#3 リクエストボディの中身

GBを超えるファイルをアップロード可能にする

上記を参考にリクエストボディを取り出し、中を確認したところ・・・
中身はmultipart/form-dataになっており、

-----------------------------7e3373050c34
Content-Disposition: form-data; name="__VIEWSTATE"

hogehoge
-----------------------------7e3373050c34
Content-Disposition: form-data; name="__VIEWSTATEGENERATOR"

fugafuga
-----------------------------7e3373050c34
Content-Disposition: form-data; name="__EVENTVALIDATION"

uhouho
-----------------------------7e3373050c34
Content-Disposition: form-data; name="fileup"; filename="test.txt"
Content-Type: text/plain

あああああああああ
-----------------------------7e3373050c34
Content-Disposition: form-data; name="Button"

send
-----------------------------7e3373050c34--

name="__VIEWSTATEGENERATOR"とかname="__EVENTVALIDATION"
とかが入っていました。(もちろんアップしたファイルデータも)

開発者ツールからDOMを確認すると
<div class="aspNetHidden"><input name="__VIEWSTATE" id="__VIEWSTATE" type="hidden" value="なかみ"></div>
見慣れないhiddenフィールドが・・・

あ~。ビューステートですか。

ページの状態保持やらセキュリティ保護のためにページ生成のタイミングでhidden値を作成。
それを使って内容を保持っている感じでしょうか。
そのためformタグを2つ以上使われると
サーバーに送りたい内容が送れなくなる危険性があるから
formタグは1つ縛りなのか・・・

ついでにpostのリクエストボディはmultipart/form-dataっぽい。

#4 まとめ

あっているかはわかりませんが、
色々中身を見るいい機会になりました。

何かご指摘等ありましたら、コメントいただければ幸いです。
よろしくお願いします。('◇')ゞ

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?