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

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

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

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

1998閲覧

MVC ドロップダウンリストを使用した検索機能の追加

kasa_4333

総合スコア2

C#

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2022/09/15 01:48

編集2022/09/16 01:21

前提

ASP.NETを使用しています。
前回の質問ではテキストボックスを使用してテーブルの検索機能を作成しましたが https://teratail.com/questions/5uqbokcpzdugfa
追加で、ドロップダウンリストも使用したいと思っています。

テキストボックスに文字を入れて、ドロップダウンリストで選択し、検索ボタンを押すと、
もともと表示されているBihinテーブルからヒットしたものを表示したいと思っています。

データベースに接続し、index.cshtmlで一覧画面が表示されています。
テキストボックスの値も取得し、検索ボタンを押すとBuppinNameカラムからあいまい検索でヒットしたものの表示は出来ています。

実現したいこと

ドロップダウンリストからBihinというSQLテーブルからBikouクエリの内容を選択できるようにしたいです。
選択した後に検索ボタンを押すとテキストボックスとドロップダウンリストのどちらの内容ともヒットするものを表示したいです。

発生している問題・エラーメッセージ

テキストボックス、ドロップダウンリスト、検索ボタン
index.cshtml

@using (Html.BeginForm()) { //テキストボックス @Html.TextBoxFor(model => model.searchString) //ドロップダウンリスト @Html.DropDownListFor( model => model.dbBikou, new List<SelectListItem> { 選択リストの表示 } ) //検索ボタン <input type="submit" value="検索" /> }

該当のソースコード

Bihin2Controller

c#

1public ViewResult Index(Bihin2Model model) 2{ 3 if (!String.IsNullOrEmpty(model.serchString)) 4 { 5 // SELECT * FROM Bihin LIKE searchString で検索したレコードを DataTable に取得 6 } 7 else 8 { 9 // SELECT * FROM Bihin で全レコードを DataTable に取得 10 } 11 12 // DataTable から List<BihinDB> modelList を生成 13 List<BihinDB> modelList = new List<BihinDB>(); 14 ・・・ 15 16 model.modelList = modelList; 17 return View(model); 18}

Bihin2Model

public string searchString { get; set; } public List<BihinDB> modelList { get; set; } public string dbBikou { get; set; }

試したこと

index.cshtmlに@Html.DropDownListForを使ってドロップダウンリストを追加。

{選択リストの表示}に備品カラムの内容を表示したいが、表示の仕方が分かりません。
controllerには

SELECT DISTINCT Bikou FROM Bihin

を使用して選択リストの重複をなくそうと考えています。

補足情報(FW/ツールのバージョンなど)

ASP.NET MVC 
Windows 10 Pro,
Visual Studio2022 Version 17.3.2
.NET framework 4.7.2

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/09/15 03:38

前回の質問の URL を質問欄に明記してそれをクリックすれば飛べるようにしてください。 どこで躓いていて何が分かれば解決するのですか? 前のスレッドのように一から十までというのはもう勘弁してください。 研修の課題だそうですが、講師には聞いたのですか?
kasa_4333

2022/09/15 04:15

お世話になっております。 >研修の課題だそうですが、講師には聞いたのですか? 一応テキストボックスとドロップダウンボックスを用いた検索機能の追加までが課題で、まだ授業が始まっていないので聞けていないです。 >どこで躓いていて何が分かれば解決するのですか? 前のスレッドのように一から十までというのはもう勘弁してください。 前回のスレッドでは大変お世話になりました。 ドロップダウンリストの選択内容にBihinテーブルのBikouカラムの内容が表示され、選択できるようにしたいです。 Bikouカラムには重複しているデータがあるので、選択するときに重複したデータは一つしか表示されないようにしたいです。
kasa_4333

2022/09/15 04:23

URLを張ったのですが、とぶとエラーになってしまったため、もう一度新しくURLを張ろうとしているのですが更新ボタンが押せないためもう少々お待ちください。
退会済みユーザー

退会済みユーザー

2022/09/15 05:34

どこで躓いていて何が分かれば解決するのですか? ・・・に具体的に答えてください。
kasa_4333

2022/09/15 05:52

>どこで躓いていて何が分かれば解決するのですか? ・・・に具体的に答えてください。 ドロップダウンリストの選択リスト部分に特定の文字ではなく、BihinテーブルのBikouカラムの内容を表示できるようにしたいです。そこが分かれば後の検索ボタンの処理は出来ると思います。 Bihinテーブル 物品名 | 備考 洗剤 | 2階 洗剤 | 1階 ゴミ袋 | 緑 ティッシュ | 2階 プルダウンリストの選択リストに、 |ドロップダウンリスト|↓           2階            1階           緑 と表示したいです。 そこからテキストボックスで「洗剤」と入力し、ドロップダウンリストで2階を選ぶとテーブルの一番上にある洗剤の列が表示されるようにしたいです。 簡潔にまとめるとドロップダウンリストの選択リストにbikouカラムの内容を重複なく表示したいです。 Bikouカラムの内容の表示の仕方で躓いています。
退会済みユーザー

退会済みユーザー

2022/09/15 08:29 編集

DISTINCT というのを知ってますか? それを使って重複しないように備考列のデータを取ってこれますか? もしそれすら知らないということですとまた一から十まで教えなければ分かってもらえないという話になってしまう ⇒ やっぱり講師に聞きましょうという話になってしまうのですが・・・
kasa_4333

2022/09/15 08:35

>DISTINCT というのを知ってますか? それを使って重複しないように備考列のデータを取ってこれますか? はい。SELECT DISTINCT Bikou FROM Bihinこれで重複無しデータがとれるというのは分かります。
退会済みユーザー

退会済みユーザー

2022/09/15 09:33 編集

じゃあなぜその先が分からないのですか? データが取れるのを知っているならコードを書いて取ってください。そのコードを質問に貼ってきちんとできているのを見せてください。そしてそれをどのように DropDownList に設定するかを考えて、コードを書いて、質問に貼って見せてください。
退会済みユーザー

退会済みユーザー

2022/09/15 09:34

リンクを直してください。
kasa_4333

2022/09/16 01:31 編集

<じゃあなぜその先が分からないのですか? データが取れるのを知っているならコードを書いて取って <ください。そのコードを質問に貼ってきちんとできているのを見せてください。そしてそれをどのよう <に DropDownList に設定するかを考えて、コードを書いて、質問に貼って見せてください。 なぜその先が分からないのかと言われましても、経験がないので分からないとしか言いようがないです。どのように DropDownList に設定するかなども調べてから分からないので聞いたつもりでした。 すみません。回答ありがとうございまいた。 リンクを何度もコピーしてはっているのですが、エラーになってしまいます。
YT0014

2022/09/16 01:14

「どのように DropDownList に設定するかなども調べて」 実際に調べた方法(検索キーワード、確認したサイトのURLなど)を質問文に追記してください。 また、確認して、理解できなかった部分も併せてお願いします。 なお、リンクエラーは、URL末尾に余分な「),」が含まれているのが原因なので、除去してください。
kasa_4333

2022/09/16 01:31

https://lizefieldwp.azurewebsites.net/index.php/2016/05/02/asp-net%e3%81%ae%e3%83%89%e3%83%ad%e3%83%83%e3%83%97%e3%83%80%e3%82%a6%e3%83%b3%e3%83%aa%e3%82%b9%e3%83%88%e3%81%ae%e3%83%aa%e3%82%b9%e3%83%88%e3%82%92db%e3%81%8b%e3%82%89%e5%8f%96%e5%be%97%e3%81%97/ 決まった値の選択リストですが、こちらも参考にしていました↓ https://www.buildinsider.net/web/bookaspmvc5/040204 二個目のサイトのcontrollerの部分をデータベースから取得した値に入れ替えれば良いと思っているのですが、合っていますか? >なお、リンクエラーは、URL末尾に余分な「),」が含まれているのが原因なので、除去してください。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2022/09/16 02:22 編集

> なぜその先が分からないのかと言われましても、経験がないので分からないとしか言いようがないです。 あなたは、 > はい。SELECT DISTINCT Bikou FROM Bihinこれで重複無しデータがとれるというのは分かります。 と言ったじゃないですか。あなたの DB の構造なんて第三者には分からないし、おまけに Entity Framework は使わないと言うし、少なくとも DropDownList に設定するデータがどういう形で取得できるかぐらいは書いてもらわないと話が進まないのですよ。 あなたにとっての一番の問題・課題は取得したデータをどのように DropDownList に渡すかだろうと想像してますが、それにしてもそのデータが具体的にどういうものかが分からないと話にならないのが分かりませんか?
kasa_4333

2022/09/16 02:31

SurferOnWwwさん 分からないのでもう少し調べます。 ご回答ありがとうございました。
YT0014

2022/09/16 02:53

>二個目のサイトのcontrollerの部分をデータベースから取得した値に入れ替えれば良いと思っている のならば、それを試してみて、何が起こるのかを確認するのは、あなたがやるべきことです。 それでエラーが起こったら、エラーメッセージなどを元に情報を入手して修正します。 恐れずに失敗してください。 失敗と修正を繰り返すことで、目的の動作をするコードを作成する。 それが、プログラミング作業です。
kasa_4333

2022/09/16 02:59

YT0014様 model.selectImageList.Add(new SelectListItem() { Value = "jQuery Tips", Text = "jQuery Tips" }); このValueとTextにselect文が入ることは可能なのでしょうか?
YT0014

2022/09/16 03:00

>このValueとTextにselect文が入ることは可能なのでしょうか? 実際に試してください。
退会済みユーザー

退会済みユーザー

2022/09/16 03:45

> 分からないのでもう少し調べます。 きちんとやらないなら面倒見切れませんので自分は撤退します。やっぱり講師に聞きましょう。
kasa_4333

2022/09/16 04:08

YT0014様 >実際に試してください。 Value = Select DISTINCT Bikou FROM Bihin 現在のコンテキストに~という名前は存在しません、初期化子のメンバー宣言子が無効ですなどの複数のエラーが出ました。
退会済みユーザー

退会済みユーザー

2022/09/16 05:26

YT0014 さん> >> このValueとTextにselect文が入ることは可能なのでしょうか? > 実際に試してください。 試すまでもなくできないのは明らかでしょう。そういうレスはあんまりだと思いますよ。 質問者さん> 試すまでもなくできないというのが分からないのは、前のスレッドで言ったように基本のキが分かってないということで、ここのような文章でやり取りするサイトでは話が通じなくて、解決が難しいでしょう。 前のスレッドで DataTable に取得してそれから List<T> 型のオブジェクトに詰め替えてましたが、それが自力でできていたなら、なぜ Select DISTINCT Bikou FROM Bihin でも同様なことができないのか不思議。
kasa_4333

2022/09/16 05:48

textで選択リストを表示しているのでそこに持ってきたいSELECT文を書けばデータベースからとってこれるのかなと思ったのですが、でもそのまま書くのは文面的になんか違うと思ったので何か違うやり方があるのかという意味で聞きました。他のやり方は思いつかなかったのですが、すべて丸投げするのは良くないと思い、書かせていただきました。
退会済みユーザー

退会済みユーザー

2022/09/16 06:16 編集

前のスレッドで DataTable に取得してそれから List<T> 型のオブジェクトに詰め替えてましたが、それが自力でできていたなら ADO.NET を使って DB からデータを取得するという基本的なことはできると思っていたんですが、違うんですか? それができたら、そのデータを SelectList または List<SelectListItem> に格納して DropDownList に渡すのです。 なので、まず、あなたがそのデータを取得するところまで最低書いてくれと言っているのです。
kasa_4333

2022/09/16 07:07

ValueとTextの部分にDBから取ってきたデータを格納するということでしょうか。
YT0014

2022/09/16 07:39

SurferOnWwwさん >試すまでもなくできないのは明らかでしょう。そういうレスはあんまりだと思いますよ。 質問者には、「できない」のが「明らか」ではありません。 ならば、思いついた以上は、試してみることは無意味だとは思いません。 ダメな場合、理由を考えることで、仕組みの理解に繋がる可能性もあります。 また、知識としても、ただ教えられたことより、実際にやってみてダメだったことのほうが、身に着く可能性が高まると思えます。 回答に繋がるコメントではないのは確かなので、回答として記載したのなら「無責任」ですが、質問欄に「試した事」を記載する為には意味があるコメントです。
退会済みユーザー

退会済みユーザー

2022/09/16 08:09

明らかにできないので無意味&無駄です。質問者さんが自分で思いついたことは聞く前に自分でやってみろと言う話はあるかもしれませんが、あなたに聞いているのですから、できないと言えば済む話です。それをやってみろと言うのは、質問者さんやここを見ているかもしれない他の閲覧者を混乱させるだけです。 実はあなたも分かってなかったのでは?
YT0014

2022/09/17 01:02

SurferOnWww様 まず、件の試案が実現可能か否かは、検討していません。 失敗しても良いから手を動かしてみては?という趣旨なので、当人が試すなり調べるなりしないのなら、こちらの提案の拒絶ということなので。 なお、申し訳ございませんが、これ以上の返答に関しては、この質問の解決とは無関係になりますので、行いません。ご了承のほどを。
退会済みユーザー

退会済みユーザー

2022/09/18 01:33

質問者さん、その後無言ですが、回答のコードが期待通り動くこと確認出来たらベストアンサーをつけてこのスレッドはクローズしてください。とにかく無言で放置は NG です。 どうやって List<string> を取得するかを質問したければ、新たに別のスレッドを立てて質問してください。
guest

回答1

0

ベストアンサー

質問に対する 2022/09/16 15:16 の私のコメントで、

前のスレッドで DataTable に取得してそれから List<T> 型のオブジェクトに詰め替えてましたが、それが自力でできていたなら ADO.NET を使って DB からデータを取得するという基本的なことはできると思っていたんですが、違うんですか?

それができたら、そのデータを SelectList または List<SelectListItem> に格納して DropDownList に渡すのです。

なので、まず、あなたがそのデータを取得するところまで最低書いてくれと言っているのです。

・・・と書いたんですが、ラチが明かないので、"2階", "1階", "緑" を List<string> に取得したところから回答します。どうやって List<string> に取得するかは質問者さんが考えてください。

Controller / Action Method

説明はコメントを見てください。

C#

1using System.Collections.Generic; 2using System.Web.Mvc; 3using Mvc5App.Models; 4 5namespace Mvc5App.Controllers 6{ 7 public class HomeController : Controller 8 { 9 public ActionResult Index(string searchString, string dropDown) 10 { 11 // DB に SELECT DISTINCT Bikou FROM Bihin を投げて以下の 12 // データが取得できたとすると 13 var data = new List<string> { "2階", "1階", "緑" }; 14 15 // 上のデータから List<SelectListItem> を生成 16 var list = new List<SelectListItem>(); 17 foreach (var str in data) 18 { 19 var item = new SelectListItem { Text = str, Value = str }; 20 list.Add(item); 21 } 22 23 // DropDownList には ViewData または ViewBag を使って渡す 24 ViewData["DropDown"] = list; 25 26 return View(); 27 } 28 } 29}

View

DropDownListFor を使うと Model が必要など話がややこしくなるので DropDownList を使います。

DropDownList は第 1 引数に渡された文字列 "DropDown" をもとにコントローラーから ViewData で渡されたデータを探して取得します。

文字列 "DropDown" は DropDownList (html では select) の name 属性に設定されます。なので、上の Index(string searchString, string dropDown) の引数 dropDown に選択された項目の値を取得できます。

第 3 引数の "未選択" は DropDownList が未選択の時に "" を送信するのに必要。無いと "2階" が送信されてしまう。

@{ ViewBag.Title = "Home Page"; } <h1>VS2022 Mvc5App</h1> @using (Html.BeginForm()) { <p> Find by name: @Html.TextBox("SearchString") <br /> @Html.DropDownList("DropDown", null, "未選択", htmlAttributes: new { @class = "form-control" }) <input type="submit" value="Search" /> </p> }

実行結果

イメージ説明

テキストボックスに「xxx」と入力し、ドロップダウンで「緑」を選択して [Search] ボタンをクリックすると、以下の通り送信される。

イメージ説明

投稿2022/09/16 07:24

編集2022/09/16 07:38
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kasa_4333

2022/09/16 07:47

すみません、ありがとうございます。 一階、二階、緑の部分は固定ではなく、データベースに内容が追加されたらプルダウンの選択リストにも追加されるようにしたいのです。 var data = new List<string> { "2階", "1階", "緑" }; こちらのコードを見ると固定されてしまっているのではないかと思ったのですが、違いますか?
退会済みユーザー

退会済みユーザー

2022/09/16 08:19 編集

> var data = new List<string> { "2階", "1階", "緑" }; > こちらのコードを見ると固定されてしまっているのではないかと思ったのですが、違いますか? 話が通じなくて正直イライラしてきます。 コードのコメントに、 > // DB に SELECT DISTINCT Bikou FROM Bihin を投げて以下の > // データが取得できたとすると と書いてあるでしょう。読んでない? 読んでも理解できない? > どうやって List<string> に取得するかは質問者さんが考えてください。 とも書きましたけど。そこはあなたが考えるのです。 2022/09/16 11:22 のコメントで、 > あなたの DB の構造なんて第三者には分からないし、おまけに Entity Framework は使わないと言うし、少なくとも DropDownList に設定するデータがどういう形で取得できるかぐらいは書いてもらわないと話が進まないのですよ。 とも書いたんだけど返事もなかったよね。
kasa_4333

2022/09/16 08:35

読んでも理解できなかったので聞きました! 疑問に思ったので分からないままだとだめだと思ったので聞いたつもりです。 分からないことや疑問に思ったことを言っただけなのにそこまで言われてしまうと悲しいです。 知らないことを質問するのが怖くなってしまいました。 丁寧にありがとうございました。 理解できるように頑張ります。
退会済みユーザー

退会済みユーザー

2022/09/16 09:35

> // DB に SELECT DISTINCT Bikou FROM Bihin を投げて以下の > // データが取得できたとすると > どうやって List<string> に取得するかは質問者さんが考えてください。 > あなたの DB の構造なんて第三者には分からないし、おまけに Entity Framework は使わないと言うし、少なくとも DropDownList に設定するデータがどういう形で取得できるかぐらいは書いてもらわないと話が進まないのですよ。 と書いたのに「読んでも理解できなかった」ってどういうこと? それじゃあ、たぶん何を書いても分からないのでは? やっぱり講師に聞きましょう。face-to-face で話ができて、あなたが何が分からないかまで会話のやり取りで探ってもらえて、あなたが知りたいことにズバリ答えてもらえるのでは?
退会済みユーザー

退会済みユーザー

2022/09/16 09:43 編集

「DB に SELECT DISTINCT Bikou FROM Bihin を投げて以下のデータが取得」以外は上の回答のコードはコピペするだけで期待通り動くはず。それが確認出来たらベストアンサーをつけてこのスレッドはクローズしてください。 どうやって DB に SELECT DISTINCT Bikou FROM Bihin を投げて List<string> を取得するかが分からなくてそれを質問したければ、新たに別のスレッドを立てて質問してください。その際は、対象の DB の構造、Entity Framework は使わないと言うこと、その他もろもろありそうな要件など詳しく書いてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問