6月20日(火)1、2コマ目
今日、やったこと
- Cartクラスを使う
- [確認テスト]Razorページ 課題8
今日のホワイトボード
[アプリケーション作成]Cartクラスを使う
前回紹介した、選択済み商品を扱うためのショッピングカートのようなCartクラスを使ったアプリケーションを作成。
| 図 作成したアプリケーション |
Program.cs
いままでとおり。Sessionオブジェクトを使えるように。
SessionExtentions.cs
いままでとおり。
Udon.cs
うどん情報を受け渡すためのクラス。
SelectedItem.cs
選択済み商品情報受け渡し用クラス。
このクラスに選択済み商品リストから商品を識別するための注文番号プロパティ(OrderIDプロパティ)を追加。
Cart.cs
ショッピングカートのようなクラス。
OrderIdプロパティは注文番号候補を保存するプロパティ。
選択済み商品リスト(ItemListプロパティ)に商品を追加する際、OrderIdプロパティから注文番号を生成し、選択商品のOrderIDプロパティにセット。
Index.cshtml
submitボタンが、カートへボタンと削除ボタンの複数ある。
どのボタンがクリックされたかがわかるように
カートへボタンのname属性は"cart"、value属性は"cart"
を設定している。カートへボタンをクリックした際はOnPost()の引数cartには”cart"がセットされ、削除ボタンクリック時には引数cartはnullになる。
| 図 どのボタンがクリックされたか判断する |
引数cartでカートへボタンがクリックされたか、削除ボタンがクリックされたかがわかる。
Index.cshtml.cs
カートへボタン、削除ボタンのどちらがクリックされてもOnPost()メソッドが動く。
引数cartでどちらがクリックされたかがわかるようにしている。
削除ボタンのvalue属性はリストの添え字でいいのでは
削除ボタンのvalue属性にわざわざ注文番号などは使わずに、リストの添え字を使ってもリスト中から1つの商品を識別できるような気がする。
下図のようにクライアント1とクライアント2が同時に同じ商品注文画面を見ている。クライアント1がvalue属性=2の商品を削除すると、選択済み商品数は2個になる。
それを知らずにクライアント2がvalue属性=2の商品を削除すると、選択済み商品リストにはすでに添え字が2の商品はないため、エラーが発生する。
| 図 リストの添え字を削除ボタンのvalue属性にすると |
クライアントが1つだけならリストの添え字でも問題ない。
でも、Webアプリケーションなので、複数のクライアントが同じ画面を見て操作する可能性があるため、リストの添え字ではリスト中から識別することができない。
次回は
テストの解説をします。