6月30日(火)1コマ目、2コマ目 リンクを取得 Facebook × Pinterest メール 他のアプリ 6月 30, 2020 今日、やったこと HTMLのフォーム 今日のホワイトボード HTMLのフォーム ユーザーに入力や選択をしてもらう部品や送信のトリガーとなるボタンもHTMLのタグ(<input>や<select>など)で作る。 <input>や<select>は下図のように表示される。 また、ボタンクリック時に送信されるデータは<form>~</form>内のテキストボックスや選択リスト。 ホワイトボード全体 演習7 ぬいぐるみのアンケートサイト リンクを取得 Facebook × Pinterest メール 他のアプリ コメント
6月2日(火)1,2コマ目(A班)、3,4コマ目(B班) 6月 04, 2020 今日、やったこと セッション 今日のホワイトボード HTTPはステートレスなプロトコル リクエスト・レスポンスの1セットで完結するのがHTTP。 複数のリクエスト・レスポンスに渡ってデータを共有する仕組みはない。 そのため、1ページで商品選択、2ページ目でお客様情報入力、3ページ目で配送先入力しても、サーバー側ではクライアント別にこれらの情報をまとめて扱う仕組みがない。よって、別の人が選んだ商品が届いたりすることなる。 セッションオブジェクトとは アプリケーションサーバーで、リクエストをまたいで情報を共有できる仕組みを用意したのがSessionオブジェクト。 実体はサーバー側のメモリ(DBに保存するケースもあり)で、1クライアントに1Sessionオブジェクトが用意される。 Sessionオブジェクトにデータ保存やデータ取り出しをする際は名前を指定して行う。 今日の演習 簡単なサイト「パンケーキ注文サイト」を作りました。 Sessionオブジェクトというより、CheckBoxListコントロールや、RadioButtonListコントロールの使い方のほうがメインだったような気がします。 1ページ目(WebForm1.aspx.cs) Sessionオブジェクトにデータをセットするくらい。 RadioButtonListコントロールは1つしか選択できないため、選択値の取得はSelectedValueプロパティ参照でOK。 2ページ目(WebForm2.aspx.cs) CheckBoxListコントロールの使い方がポイントか。 〇選択値取得 複数選択可能なため、 選択項目を1つずつ取得し、 選択されているかチェック を選択項目数繰り返す。 〇選択値を格納 配列のようなListクラスを使う。 宣言時に List<string> としている。<>内は要素の型。これだとstringのみ格納可能なListになる。 なお、3,4ページも同じ。 5ページ目(WebForm5.aspx.cs) 〇Sessionオブジェクトからデータ取り出し、格納 Sessionオブジェクトからデータを取り出すとき格納先... 続きを読む
7月21日(火)1、2コマ目 7月 21, 2020 今日、やったこと ~.cshtmlと~.cshtml.cs間でのデータ受け渡し OnGet()、OnPost() 今日のホワイトボード 今までは~.cshtmlだけ Razorページを追加すると ~.cshtml ~.cshtml.cs のペアが追加される。が、今までは~.cshtmlで コードブロック コードナゲット ディレクティブ を使っただけだった。 ~.cshtml.csもある ~.cshtmlはHTML+C#のイメージ。 ~.cshtml.csは普通のC#のクラス。 HTTPの GETコマンドやPOSTコマンドに対する処理 を書くことができる。 ~.cshtml.csから~.cshtmlにデータを渡す ①~.cshtml.csにはプロパティを用意する ②~.cshtmlでは Model.プロパティ名 で取得できる ~.cshtml.csのインスタンスライフサイクル クライアントからの リクエストごとにインスタンスが生成される 。 以外と重要なので、覚えておいてください。 リクエストごとにインスタンスが生成されるため、プロパティの値もリクエストごとに変わる。(前のリクエストの状態を維持することができない!!) よって、プロパティに表示データの初期値をセットするのはコンストラクタがいい。 submitボタンとOnPost() submitボタンをクリックする(POSTコマンド送信)と、選択値や入力値を送信できる。 これらのデータを取得してなにか処理をしたい場合、~.cshtml.csのOnPost()メソッドを使う。 ポイント1 name属性 = 引数名 HTMLのname属性と同じ名前の引数に選択値、入力値が代入される。 ポイント2 ~.cshtmlに@AddTagHelper追加 以下を追加すること。 @AddTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 自作クラスを使う ~.cshtmlや~.cshtm... 続きを読む
9月1日(火)1、2コマ目 8月 26, 2020 前回のテストを採点して とりあえず、以下の3点を今後気を付けてください。 Itemクラスをサイズデータ受け渡しに使わない プロパティが同じ(ID, 名前, 価格)なので、Itemクラスをサイズデータ受け渡しのために使っている方がおられました。 Itemクラスから連想するのは「商品かな?」です。おそらく、サイズではないと思います。 このような使いまわしは直感的ではないため、やめたほうがいいです。 掟1 クラス名や変数名から連想されるデータだけを扱うこと! Index.cshtml.csのOnPost()にて① 選択された商品およびサイズを調べて、変数に代入するのですが、問題は変数名です。 Item target1 = null; Size target2 = null; のように、 target1 、 target2 と変数名からなんなのかがわからない方が結構おられました。 たとえば、 Item targetItem = null; Size targetSize = null; なら、変数名から対象商品だな、選択されたサイズだなとわかります。 変数名にかかわらず、クラス名、メソッド名、プロパティ名は名前からわかるようにしてください。 掟2 名前から実態がわかる変数名やクラス名、メソッド名を命名すること! Index.cshtml.csのOnPost()にて② 選択サイズによって価格の差額が決まります。 問題は商品の価格を計算、表示する部分です。 ご丁寧に int price = targetItem.Price; と変数を宣言したうえで、Tallでの金額を代入し、 price += targetSize.Price; とサイズによる差額を反映して strSelectedItem = "[" + targetItem.Id + "]" + targetItem.Name + ・・ + "(" + price + "円)"; で表示用文字列を作っている方がおられました。 変数priceは必要でしょうか? 以下で十分な気がします。 strSelected... 続きを読む
コメント