・DBより取得したデータを画面上のオブジェクトに設定してマウスオーバーした際にポップアップで表示されるようにしたい。
・今回はグッズ名称をオブジェクト(SVG画像)に設定したいとする。
一意のグッズ名称取得にはType_cd,box_tsuban,goods_tsubanが必要である。
例..
Type_cdがAでbox_tsubanが1、goods_tsubanが1のグッズ名称は...という絞り込みでデータを取り出す。
・今回、テストとしてそれぞれType_cd = "A",box_tsuban =1,goods_tsuban =1のグッズ名称をStarというIDを持ったオブジェクトに設定したいとする。(Index.cshtml)
・jQueryのtipperというプラグインを使いポップアップのイベントを起こす。イベントを起こしたいオブジェクトには同一のクラスを付与しており、現状マウスオーバーで「undifinded」と設定されていないがポップアップ自体の動作は確認している。値を第二引数に直打ちで設定すればその文字が出ることも確認している。
現状
ブレイクポイントを置いて見ているとModelへセットできているが、Index.cshtmlで値がとれない
何が知りたいか
・Modelへデータを詰め込む方法
・View側でIEnumerable型のデータを取得するときの実装方法。
環境情報
フレームワーク:Asp.net mvc .NETFramework
データベース:Postgresql
jQueryバージョン情報:3.3.1
OS:windows7
.NET:4.6.2
Visual Studio:visual studio2017
c#
1コントローラー 2///<summary> 3 ///グッズ名称取得 4 ///</summary> 5 private IEnumerable<GoodsModel.GoodsMeishoViewModel> GetGoodsName(NpgsqlConnection dataConnector) 6 { 7 List<GoodsModel.GoodsMeishoViewModel> GoodsMeishos = new List<GoodsModel.GoodsMeishoViewModel>(); 8 9 10 //テスト用の値 11 string Type_cd = "A"; 12 int box_tsuban = 1; 13 int goods_tsuban = 1; 14 15 16 string sql = @"select box_tsuban, goods_tsuban, goods_meisho" 17+ " from master.グッズ名称マスタ where Room_cd = :RoomCd and Type_cd = : TypeCd and box_tsuban = :Box_tsuban and goods_tsuban = :Goods_tsuban"; 18 19 NpgsqlCommand cmd = new NpgsqlCommand(sql, dataConnector); 20 cmd.Parameters.Add(new NpgsqlParameter("kikishitsuCd", NpgsqlDbType.Text)); 21 22 cmd.Parameters.Add(new NpgsqlParameter("TypeCd", NpgsqlDbType.Text)); 23 cmd.Parameters.Add(new NpgsqlParameter("Box_tsuban", NpgsqlDbType.Integer)); 24 cmd.Parameters.Add(new NpgsqlParameter("Goods_tsuban", NpgsqlDbType.Integer)); 25 cmd.Prepare(); 26 cmd.Parameters["RoomCd"].Value = Session["RoomCode"].ToString(); 27 cmd.Parameters["TypeCd"].Value = Type_cd; 28 cmd.Parameters["Box_tsuban"].Value = goods_tsuban; 29 cmd.Parameters["Goods_tsuban"].Value = goods_tsuban; 30 31 using (NpgsqlDataReader dr = cmd.ExecuteReader()) 32 { 33 while (dr.Read()) 34 { 35 GoodsMeishos.Add(new GoodsModel.GoodsMeishoViewModel() 36 {//ここの処理が飛ばされる 37 boxtsuban = (int)dr["box_tsuban"], 38 goodstsuban = (int)dr["goods_tsuban"], 39 goodsmeisho = dr["goods_meisho"].ToString() 40 41 }); 42 } 43 return GoodsMeishos; 44 }
c#
1Model 2public class GoodsModel : 〇〇ModelBase 3 { 4 ///<summary> 5 ///グッズ名称をセット 6 ///</summary> 7 public IEnumerable<GoodsMeishoViewModel> GoodsMeisho { get; set; } 8 9 public class GoodsMeishoViewModel 10 { 11 //box通番 12 public int boxtsuban { get; set; } 13 14 //グッズ通番 15 public int goodstsuban { get; set; } 16 17 //グッズ名称 18 public string goodsmeisho { get; set; } 19 } 20
c#
1index.cshtml 2 3//オブジェクトのIDを取得し、属性に名称をセットしたい。ポップアップを出したいクラスにはそれぞれAnameというクラス名をつけており、プラグインのtipper()メソッドにより名前が設定されていたら名前が出る。 4$(function(){ 5$('#Star').attr('data-title', '@Model.GoodsMeisho'); 6 7 $('#Star2').attr('data-title', '@Model.GoodsMeisho'); 8 9 $('.Aname').tipper(); 10 11});
c#
1アクション 2 public ActionResult Index() 3 { 4 var model = this.CreateModel<GoodsModel>(); 5 // セッションよりNpgsqlConnectionを取得 6 NpgsqlConnection dataConnector = (NpgsqlConnection)Session["dataConnector"]; 7 8 // DBオープン 9 dataConnector.Open(); 10 11 12 model.GoodsMeisho = GetGoodsName( dataConnector); 13 14 dataConnector.Close(); 15 16 return View(model); 17 18 }
追記
■期待する結果と現状
期待・コントローラに記載しているwhile文のなかの処理でListに情報を詰めてreturnしたい
現状・Modelに値をセットするところまでは確認済み。Index.cshtmlの@Model.GoodsMeishoで値が返ってこない。
オブジェクトにカーソルを合わせると、「○○Models.GoodsModel+GoodsMeishoViewModel」と表示される○○は基底モデル
回答1件
あなたの回答
tips
プレビュー