質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

1回答

1005閲覧

DBから取得したデータの表示(マウスオーバー)

sanezane

総合スコア91

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2018/06/28 13:55

編集2018/06/29 01:46

・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」と表示される○○は基底モデル

カーソルが当たったときの挙動

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2018/06/28 21:24

PostgreSQL タグを追加されては?
退会済みユーザー

退会済みユーザー

2018/06/28 21:40

どこでトラブっていて、そこで期待する結果は何で、実際はどうなってしまう・・・ということをできるだけ詳しく書きましょう。
退会済みユーザー

退会済みユーザー

2018/06/28 21:44 編集

あと、開発環境をもう少し詳しく書いてください。OS, .NET, MVC, Visual Studio のバージョンなど。
退会済みユーザー

退会済みユーザー

2018/06/29 01:31

最初の質問に「ブレイクポイントを置いて見ていると接続自体はできているが、ModelにAddするところWhile文の部分を飛ばしている。(trueは返しているが、add処理していない。) 」と書いてありましたがそこは解決したのですか?
退会済みユーザー

退会済みユーザー

2018/06/29 01:34

で、GetGoodsName メソッドを起動すると戻り値として List<GoodsModel.GoodsMeishoViewModel> 型のオブジェクトが取得でき、アクションメソッドでは return View(そのオブジェクト); としているところまで進んでいるということでいいのですか?
退会済みユーザー

退会済みユーザー

2018/06/29 01:44 編集

質問文を直すだけではなく、コメントに対してはコメントで返事(要求に応じて追記・修正をしたのかどうかなど)をしていただけると助かります。
sanezane

2018/06/29 01:49

その通りです。アクションメソッドを追加しました。
退会済みユーザー

退会済みユーザー

2018/06/29 02:01

「その通りです」てホントにそうなんですか? this.CreateModel<GoodsModel>(); は何を返すのですか? 話が通じるようにお願いします。
退会済みユーザー

退会済みユーザー

2018/06/29 02:06

上のコメントでの私の質問「アクションメソッドでは return View(そのオブジェクト); としているところまで進んでいるということでいいのですか?」の「そのオブジェクト」とは List<GoodsModel.GoodsMeishoViewModel> 型のオブジェクトのことを言っているのですが・・・
sanezane

2018/06/29 02:36 編集

model.GoodsMeisho = GetGoodsName( dataConnector);でList<GoodsModel.GoodsMeishoViewModel> 型のオブジェクトを入れている認識なのですが、間違ってますか?すみません初めて間もないもので。。。
退会済みユーザー

退会済みユーザー

2018/06/29 02:47

var model = this.CreateModel<GoodsModel>(); で作られた model というのは何ですかという話です。CreateModel<GoodsModel> の定義がどこかに書いてあって、そのメソッドが返すオブジェクトの型は分かるようになっているのでしょうか? GoodsModel クラスのオブジェクトではなかろうかとコードからは想像してますが、想像が間違っていると当然答えも間違って、混乱を招くだけということになりかねないので、聞いてます。
sanezane

2018/06/29 03:00

すみません。基底のコントローラに定義してあるModelのインスタンスを生成し返すモノです。<>内はModelの型です。
guest

回答1

0

ベストアンサー

一番最初の質問に書いてあった(今は書き直したようですが)、

ブレイクポイントを置いて見ていると接続自体はできているが、ModelにAddするところWhile文の部分を飛ばしている。(trueは返しているが、add処理していない。)

というところはすでに解決していて、GetGoodsName メソッドを起動すると戻り値として List<GoodsModel.GoodsMeishoViewModel> 型のオブジェクトが取得できる。

アクションメソッドで GoodsModel クラスを初期化し、その GoodsMeisho プロパティを使って、GetGoodsName メソッドで取得した List<GoodsModel.GoodsMeishoViewModel> 型のオブジェクトを設定し、return View(GoodsModel) とした。

現時点の課題は、アクションメソッドの return View(GoodsModel) で View に渡された Model から List<GoodsModel.GoodsMeishoViewModel> 型のオブジェクトの内容を取得すること。

・・・と理解してレスします。

今回のケースでは List<GoodsMeishoViewModel> 型のオブジェクトさえ View に渡せば済むはずで、質問者さんが書かれたサンプルのような入れ子の class をモデルに使うを必要はないと思いますが(特に理由があれば別ですが、そうでなければ複雑&面倒になるだけなので)、とりあえずそこは置いときます。後で考えてみてください。

以下のようにすれば良いはずです。質問者さんのデータベースは当然自分は使えないので、モデルとして View に渡す GoodsModel クラスのオブジェクトは C# のコードだけで作りましたが、内容はともかく型は同じはずです。

アクションメソッド

public ActionResult Index2() { var model = new GoodsModel(); List<GoodsModel.GoodsMeishoViewModel> GoodsMeishos = new List<GoodsModel.GoodsMeishoViewModel> { new GoodsModel.GoodsMeishoViewModel { boxtsuban = 1, goodstsuban = 2, goodsmeisho = "aaa" }, new GoodsModel.GoodsMeishoViewModel { boxtsuban = 3, goodstsuban = 4, goodsmeisho = "bbb" }, new GoodsModel.GoodsMeishoViewModel { boxtsuban = 5, goodstsuban = 6, goodsmeisho = "ccc" } }; model.GoodsMeisho = GoodsMeishos; return View(model); }

ビュー

@model 名前空間.GoodsModel @{ ViewBag.Title = "Index2"; } <h2>Index2</h2> @foreach (var item in Model.GoodsMeisho) { <p>boxtsuban = @item.boxtsuban, goodstsuban = @item.goodstsuban, goodsmeisho = @item.goodsmeisho</p> }

結果の html コード

<h2>Index2</h2> <p>boxtsuban = 1, goodstsuban = 2, goodsmeisho = aaa</p> <p>boxtsuban = 3, goodstsuban = 4, goodsmeisho = bbb</p> <p>boxtsuban = 5, goodstsuban = 6, goodsmeisho = ccc</p>

投稿2018/06/29 03:19

編集2018/06/29 03:25
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanezane

2018/07/02 05:32

List<GoodsModel.GoodsMeishoViewModel>を取得し、Viewで表示させる際に、 View側で$('#meisho01').attr('data-title', '@Model.GoodsMeisho.First().goodsmeisho');のようにすることで無事値の表示に成功しました。ですが、画面に存在する全ての要素に品名をそれぞれ付与して表示することが最終目標なので、そこが未解決です。今回の質問の内容としては表示するところまでが範囲かと思いますので別件としてまた質問を投稿させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問