投稿

9月, 2020の投稿を表示しています

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>)に格納。 ただし、同じ色が格納済みなら追加しない。