投稿

9月23日(水)1、2コマ目

イメージ
今日、やったこと 課題3(SessionオブジェクトにList<>のインスタンス格納) 課題4(Cartクラスを作る) 課題5(SelectedItemクラスのGetHashCode()メソッド) 課題4のヒント 削除ボタンクリック時 サーバーに削除対象を伝えなければならない。 が、設定できるのは<button>のvalue属性のみ。あまり長い文字列は好ましくない。 そこで、選択リスト中の何番目のような情報(行番号のようなもの)を伝えればいいのでは。 しかし、選択リスト中の各商品にこの行番を割り当てる必要がある。 選択商品リスト中の各商品にいつ行番号を割り当てる? 選択商品リストに追加するタイミングで。 ただし、割り当てる値は簡単に取得したい。間違っても選択商品リストから1つずつ商品を取り出して行番号の最大値を探すみたいなことはしたくない。 割り当てる行番号は? そこで、割り当て行番号候補を格納する変数を用意すればいい。 ただし、選択商品リストとセットで。 選択商品リスト+割り当て行番号=>Cartクラスへ セットで扱うならクラスで。この2つをフィールドに持つCartクラスを用意する。 さらに、選択商品リスト追加メソッドや削除メソッド、選択商品リスト取得メソッドを用意すれば、選択商品のとりまとめはCartクラスで完結する。 図 課題4のヒント

9月15日(火)1、2コマ目

イメージ
今日、やったこと 前回の課題をチェックして チェックボックス、複数ボタン 課題 今日のホワイトボード 前回の課題をチェックして 3点ほど気になることがありました。 コンパイルレベルのエラー 「xxxクラスがない」といったコンパイルレベルのエラーがある人がちょこちょこおられました。 HTMLのテーブルタグが使えていない? 表形式で出力するためには<table>タグを使いますが、結構タグが多いのでちゃんと使えていない方がおられました。 図 <table>タグ 同じ商品? 選択した商品と同じ商品がSessionオブジェクト中の選択済み商品リスト中にあるかチェックする際、Equals()メソッドが使えるとプログラムを見やすくしてくれます。 なお、同じかどうかを比べる際に==演算子とEquals()の2種類があります。 それぞれ 何を比較するのかが異なります 。 図 ==演算子とEquals()メソッド 特にxxxクラス型の変数を比較する際、 参照先が同じ(同じインスタンスを参照している) 中身が同じ(インスタンスは異なるが、フィールドは同じ) の2パターンありますので、ご注意ください。 1フォーム中に複数ボタン 1つのフォームの中に複数のボタンがある場合、どれが押されたかを判断する必要があります。1つの方法として以下を紹介します。 各ボタンのname属性は同じ 各ボタンのvalue属性は異なる値 OnPost()ではname属性と同じ名前の引数を用意 この引数には押されたボタンのvalue属性設定値が代入される よって、OnPost()では引数代入値でどのボタンが押されたかがわかる Index.cshtml Index.cshtml.cs

9月8日(火)1、2コマ目

イメージ
 今日、やったこと セッションの確認テスト課題 チェックボックス、複数ボタン 今日の確認テスト課題 課題内容 ポイントは 「同じ商品が複数回選択された際、数量を合算して1行にまとめる」 だと思います。 図 セッション確認テスト課題① 図 セッション確認テスト課題② 図 セッション確認テスト課題③ 図 セッション確認テスト課題④ ソースコード Startup.cs 今まで同じ。 SessionExtensions.cs 今までと同じ。 Coffee.cs コーヒー情報受け渡しのために使うクラス。 Size.cs サイズ情報受け渡しのために使うクラス。 SelectedItem.cs 選択商品情報(コーヒー、サイズ)をまとめて扱うためのクラス。 商品選択時に、選択商品、選択サイズからこのクラスのインスタンスを生成する。 Index.cshtml 強いて言うなら、ラジオボタンのname属性を揃えること。 Index.cshtml.cs すでに選択済み(Sessionオブジェクトの選択商品リストに格納済み)商品かどうかを判断するところがポイントでしょうか。ソース自体はなんてことはないのですが。 ラジオボタン・複数ボタン とりあえず、削除ボタンがない状態まで作成してください。 ソースコードを載せときます。 図 チェックボックス・複数ボタン① 図 チェックボックス・複数ボタン② 図 チェックボックスについて Color.cs 色情報を受け渡すために使うクラス。 Index.cshtml 強いて言うなら、チェックボックスのname属性を揃えるくらいでしょうか。 Index.cshtml チェックボックスは複数選択可能なので、OnPost()の引数は配列にする。 この配列の要素(選択色のID)を1つづつ取り出し、colorLlistプロパティ(List<Color>)の各要素とIDが一致するモノを探す。 見つかったら、セッションオブジェクト中の選択色リスト(List<Color>)に格納。 ただし、同じ色が格納済みなら追加しない。

9月1日(火)1、2コマ目

イメージ
前回のテストを採点して とりあえず、以下の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...

8月25日(火)1、2コマ目

イメージ
 今日、やったこと セッションを使ったアプリケーション作成[練習問題7] セッションを使ったアプリケーション作成[課題2] セッションを使ったアプリケーション作成[練習問題7] 作成するアプリケーションは以下のとおり。 図 練習問題7 ソースコード Startup.cs セッション用にいくつか設定を行う必要あり。 Item.cs 商品情報(id, 商品名)をひとまとめにして扱うためのクラス。 Index.cshtml Index.cshtml.cs セッションを使ったアプリケーション作成[課題2] 作成するアプリケーションは以下のとおり。 図 課題2(1ページ目) 図 課題2(2ページ目) ソースコード Startup.cs 練習問題7と同じ。 Coffee.cs 商品(コーヒー)の情報(id, 商品名, 価格)をひとまとめにして扱うためのクラス。 Size.cs サイズの情報(ID, 表示名, 差額)をひとまとめにして扱うためのクラス。 Index.cshtml Index.cshtml.cs

8月18日(火)1、2コマ目

イメージ
 今日、やったこと セッション 今日のホワイトボード (おさらいだけど)HTTPはリクエスト・レスポンスで完結 HTTPはリクエスト・レスポンスで完結する。同じクライアントからの複数のリクエストでサーバー側にデータを共有する仕組みはない。 実際は、リクエストをまたいだデータ共有ができないのは不便なので、アプリケーションサーバー(HTTPサーバーではなく、Webアプリケーションを実行する環境)で実現している。多くの環境ではセッションオブジェクトと呼んでいる。 図 HTTPの特徴、セッションオブジェクト Razorページでのセッション セッションオブジェクト取得 ~.cshtml、~.cshtml.csにて HttpContext.Session で取得可能。 セッションにデータを保存、取り出し 取得したセッションオブジェクトの以下のメソッドを使う。 〇保存する メソッド 引数 戻り値 役割 void SetInt32(string key, int value) key:保存データの名前 value:保存データ なし int型データをセッションオブジェクトに保存する void SetString(string key, string value) key:保存データの名前 value:保存データ なし string型データをセッションオブジェクトに保存する 〇取得する メソッド 引数 戻り値 役割 int GetInt32(string key) key:取り出す保存データの名前 ...

8月4日1、2コマ目

イメージ
 今日、やったこと 演習(標準体重計算アプリ作成) 今日の演習 入力された身長から標準体重を計算、表示する。 その1 計算のみ(正常系のみ) 内容 図 演習 その1 計算のみ 入力値を~.cshtml.csで処理する サーバーに送信されるデータ <form>~</form>で囲まれた中にあるボタン(type="submit")をクリックすると、同じ<form>~</form>内の<input>や<select>の入力値や選択値が送信される。 GETコマンド?POSTコマンド? 送信時に使われるHTTPのコマンドは<form>のmethod属性で指定する。 GETまたはPOSTを指定する。 サーバー側の処理①どこに処理を書く? ~.cshtml.csに書くことができる。 GETコマンドなら、OnGet()メソッド、POSTコマンドならOnPost()メソッドが実行される。 サーバー側の処理②送信データをどうやって取得する? 送信される入力値や選択値はOnGet()、OnPost()の引数で受け取ることができる。 なお、引数名は<input>や<select>のname属性設定値と同じにすること。 図 サーバー側で入力値、選択値を取得し処理する 解答例 ~.cshtml ~.cshtml.cs その2 入力値チェック(155cm未満はエラー) 内容 図 演習 その2 入力値チェック 解答例 ~.cshtml ~.cshtml.cs その3 体重入力、標準体重との差を出力 内容 図 演習 その3 体重入力・標準体重との差出力 サーバー処理結果を画面に表示...