エンジニア転職38日目
こんにちは、コリーです。
38日目の今日は、
ASP.NET
webフォーム作成
JavaScriptとの連携
HiddenField
を行いました。
躓いたところを振り返っていきます。
今日は、終業10分前から振り返りとしてA4方眼紙に“今日のまとめ”を書いてきたので、割とまともな内容になると思います。
●JavaScriptと.aspxと.aspx.vb
〈目標〉.aspxのTextBoxに入力した文字列をJSでチェックしたい
そこで以下のように考え、調べながらモチモチやっていました。
STEP1: .aspxからJSを呼び出せるようにする
STEP2: テキストボックスのidを引数にして、JSの関数を使う
STEP3: エラーの表示
なお、エラーの処理をJSでも.vbでもやるのは、サーバーどの通信回数を減らすためで、できる限りクライアント側(JS)でチェックしておこうね、ということダそうです。「通信回数を減らす」「負担を減らす」というのは、大事な視点ですよね。
【躓いた理由】
⇩
【解決方法】
STEP1
①そもそも参照がおかしかった。こういうのは、指摘されるまでなかなか気付かない…。
ソリューションにJavaScriptように作った「JS2.js」は、「JS」フォルダに入れていたため、「JS/JS2.js」とするのが正しい。
②onclickは使えない。
aspはサーバーサイドになるため、htmlとは少し設定方法などが異なるようです。aspでは、OnClientClickを.aspx.vbに置いて、clickイベントで実行されるクライアント側スクリプトを設定しておく必要があります。
aspで扱うということは、サーバーで扱いたいという意識の現れなので、逆にサーバーで扱う必要のないものは、htmlの句で処理しても良いとのことでした。
STEP2
〇引数で持っていくのは大変。
Pageクラスとか調べる前に、getElementById(“id名”).valueで取得できる。これは、.aspxと.jsをリンクで繋げてあるからできること。
STEP3
〇Alert(“これは大丈夫そう”);
●HiddenFieldのやり方
見様見真似で使っていたSession()は.apx.vbに直接書いていたし、扱いたい変数も.vbの方にあるため、.vb側に書くのだろうと思ってやり方を模索していました。
Dim 名前 As HiddenField
としてみると、Dimでは使える範囲が狭いことに気づきます。
Public 名前 As HiddenField
とすると、うまく行きました。これで変数を.vbで扱えるようになりました。
…あれ、これじゃただPublicで宣言しただけのグローバル変数ですよね?
結局、.aspxのほうで下記のとおりにしました。
<asp:HiddenField id = “名前” runat = “server” value = “” />
このほうがスマートな感じですが、どうなんでしょう。
●PostBackの復習
【自分の理解】
〇Post
ブラウザ上での入力をサーバーに送信(サブミット)すること
〇PostBack
一度問い合わせたサーバーに再び送信すること
【参考サイト曰く】
〇Post
『ボタンがクリックされることにより、action属性に記述されているページが呼び出され、その際にフォーム内のコントロールの値がサーバへ送信される。このような、フォームのサブミットによるデータの送信が「データをポストする」という処理だ。』
〇PostBack
『ASP.NETでは、action属性に埋め込まれるURLは、上記のフォームのように常に現在開いているページのURLとなる。このため、ASP.NETにより生成されたページでは、データをポストする先は常にそのページ自身である。このようなポストを、ASP.NETでは特に「ポストバック」と呼んでいるのである。』
(参考サイト:[ASP.NET]ポストとポストバックの違いは?:.NET TIPS - @IT)
【つまり】
〇Post
フォームのサブミットによるデータ送信
(ブラウザ上の入力データ(コントロールの値)をサーバー(指定されたページ)に送信すること)
〇PostBack
ASP.NETにおける2回目以降のデータ送信
なお、ASP.NETでは、Post(PostBack)のたびにroad(ページの初期設定)が実行されてしまうため、IsPostBackを使ってroadを実行させないようにする工夫が必要になる。
おわり