忍者ブログ
HOME > ASP.NET &C# > (9)『ASP.NET』&『C#』で~ページ間のデータ受渡し(その3) RSS   Admin NewEntry Comment
情報処理、インターネット系の技術に関するお役立ちページを目指します。が、最近はゲームやアニメの話ばっかりかもし~

この記事は、『基礎からのASP.NET』
目時秀典・鈴木和久 著/ソフトバンククリエイティブ
を教科書にして、C#で勉強していこうというものです。
本を持ってなくてもわかるようにしようとは思っていますが~
いまチャプター8を攻略中です。

はい、ページ間のデータ受渡しも3回目になります。
今回はちょっと楽できそうですかね^^;

やりたいことは前々回(7)と同じですので、
SendData1.aspx (画面にHTMLのTextBoxDropDownList、標準のButtonを配置)
GetData1.aspx  (画面に標準のLabelを2個配置)

通常のHTMLタグにちょっと手を加えると、前回(8)と似た方法で値の取得が
できるとのことです。

まず送信側の画面を見てみましょう。

最初に、Input(Text)コントロール。
<input id="Text1" type="text" name="Text1"/>

name属性を付けることで、値取得時の識別子にするんでしたね。

これを、
<input id="Text1" type="text" runat="server"/>
のようにします。
name="Text1"は不要です。
ツールボックスのHTMLカテゴリからドロップした後、「runat="server"
を追加しただけです。

どうも本の説明では、「サーバーコントロールとして実行」という
コンテキストメニューが出てくるようになってるんですが、
VWD2008ではでてこないっぽいですね??
ちょっと調べてみますが、今回は気にせず行きます。

次に、Selectコントロール。
<select id="Select1" name="fruit">
の部分を

<select id="Select1" name="fruit" runat="server">
とするだけです。残りのオプション部分は(7)回のソースと同じです。
        <option value="Apple">りんご</option>
        <option selected="" value="Orange">みかん</option>
        <option value="bana">バナナ</option>
    </select>

こちらも、「runat="server"」を足しただけですね。
こうすると、データを受け取る時はどう変わるんでしょうか?

ポイントだけ前回の記述と比較しましょう。
<前回のWebサーバコントロールの値を取得する方法>
TextBox Tmp_TextBox = (TextBox)Page.PreviousPage.FindControl("TextBox1");
if (Tmp_TextBox != null)
{
    Label1.Text = Tmp_TextBox.Text;
}

DropDownList Tmp_DropDownList = (DropDownList)Page.PreviousPage.FindControl("DropDownList1");
if (Tmp_DropDownList != null)
{
    Label2.Text = Tmp_DropDownList.SelectedValue;
}

<今回のHTMLサーバコントロールの値を取得する方法>
HtmlInputText Tmp_InputText = (HtmlInputText)Page.PreviousPage.FindControl("Text1");
if (Tmp_InputText != null)
{
    Label1.Text = Tmp_InputText.Value;
}

HtmlSelect Tmp_HtmlSelect = (HtmlSelect)Page.PreviousPage.FindControl("Select1");
if (Tmp_HtmlSelect != null)
{
    Label2.Text = Tmp_HtmlSelect.Value;
}

キャストする型が変わりました。Html~型になります。
コントロールの識別には、name属性ではなく、id属性(Text1Select1)を使います。
(idはプロパティと呼べなくもなさそうですが、<asp:~>タグではないので
  HTMLと同じく属性という表現にしておきます)
取得するプロパティがValueに変わっています。

さて、今まで出てきた3種類の方法をまとめておきます。
Webページ上に表示する入力部品には3種類あります。
一般的なHTML
  
  [画面の記述方法]
  HTMLタグそのもの(ツールボックスのHTMLカテゴリからドロップ)

  [入力された値の取得方法]
  Page.Request.Form("HTMLタグのname属性")


Webサーバコントロール
  [画面の記述方法]
  <asp:~>  </asp:~>(ツールボックスの標準カテゴリからドロップ)

  [入力された値の取得方法]
  Page.PreviousPage.FindControl("asp:~タグのIDプロパティ")
  →ただし、対応するSystem.Web.UI.WebControls のクラスに
    キャストして使用する。
    送信側の画面上でクラスとして認識されているのと同じ型が、
    上記メソッドによって得られる。

HTMLサーバコントロール
  [画面の記述方法]
  HTMLタグの属性に、runat="server" を追加

  [入力された値の取得方法]
  Page.PreviousPage.FindControl("HTMLタグのid属性")
  →ただし、対応するSystem.Web.UI.HtmlControls のクラスに
    キャストして使用する
    HTMLと同等の記述をしていながら、それがクラスとして表現された型が
    上記メソッドによって得られる。


本によると、この3つの方法が「POSTメソッドの処理」として
紹介されているんですが・・・。
腑に落ちない・・・><;

というのも、「GETメソッドの処理」の段になって始めて、
formタグのmethodに"get"を設定する説明がでてくるんです。
つまり今まではformタグにはmethod=は記述してないんです。

formタグのmethodはデフォルトが"get"であると、
手持ちの『プチリファレンスHTML』やいくつかのWeb上のHTMLリファレンスで
確認できました。
<参考>
TAG<index>
http://www.tagindex.com/html_tag/form/form_action.html

え!?
じゃぁいままでのはpostではなくgetで動いてたんじゃ??

試しに今回まとめた3つの方法全てで、formタグに
method="get" もしくは method="post"
を明示して試してみました。
(methodの記述がない場合は、3つとも動作を確認しています)

すると、一般的なHTMLだけは、
method="get"  →NG表示されず
method="post" →OK表示できた!
となりました。
なるほど、ここは明示してなければ"post"となってるようです。

Webサーバコントロール、およびHTMLサーバコントロールは、
どちらでも表示ができました!!

これまた微妙な結果です^^;
サーバコントロールはmethodに依存しないんでしょうか?
とはいえ、どちらでも問題ないという方がメンドウがなくて良い
と考えることもできますね。

関係するかわかりませんが、
VWD2008のデフォルトで出力されるformタグは、
<form id="form1" runat="server">
のように、runat="server" が付与されてるんですねー。
てことは、このform自体がサーバーコントロール?

この記述を外そうとすると、
<asp:~>タグがform内にある場合と、runat="server" 付きのコントロールが
ある場合にはエラーになるようです。

ん~どうも迷走してしまいますね。
まぁそういうモノだと思っておきますか・・・。

ちなみに、methodoに「get」を使うか、「post」を使うかは、
上記参考サイトの他、以下のサイトが参考になりました。

<参考>
The Web KANZAKI
http://www.kanzaki.com/docs/html/htminfo32.html#method-choice


今回はここまでにしておきます。
次回は「getメソッド」を使う方法です。
 

PR
postこの記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
[61]  [60]  [59]  [58]  [57]  [56]  [55]  [54]  [53]  [52]  [51
最新コメント
[05/13 backlink service]
[03/21 北斗]
[07/04 肌色タイプ]
[05/22 NONAME]
[08/29 ゼフィ]
最新トラックバック
プロフィール
HN:
イフゼンエルス
性別:
男性
職業:
SE
みっくみくになーれ♪
フリーエリア
メールはこちら♪
広告
カレンダー
04 2012/05 06
S M T W T F S
1 2 3 4 5
6 8 10 11
13 14 15 16 17 18 19
20 22 23 24 25 26
27 28 29 30 31
カウンター
おすすめ?
IfThenElseのブログ Produced by イフゼンエルス
日めくりカレンダーBLUE Designed by がりんぺいろ
ブログ [PR]旅館 資格