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

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

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

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

MVC

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

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

ASP.NET

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

Q&A

解決済

1回答

1449閲覧

Controllerで取得した複数のDBの値をViewに渡したい

pomu.pomupomu

総合スコア18

C#

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

MVC

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

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

ASP.NET

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

0グッド

0クリップ

投稿2018/08/24 08:21

編集2018/09/30 05:23

前提・実現したいこと

ASP.NET mvc5 掲示板を作っている初学者です。
現在、タブを押した際に表示されるスレッドのタイトル(DataBase中にはTopicsという名前で定義してます)が種類ごとに絞り込まれるよう機能を実装中に

c#

1return View()

には一つの返り値しかかけないため、複数のLinqの文をcontrollerに書いてもViewに渡すことができない問題に躓いてしまったため質問を投稿しました。

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

安直すぎるとは自分でも思うのですが、他に手が浮かばずこのように書くと、
Controller

c#

1 // GET: NewTopics 2 public async Task<ActionResult> Index() 3 { 4 5 var topics = db.Topics.Include(t => t.AspNetUsers).Include(t => t.Categories).Include(t => t.Regions); 6 var TurfTopics = db.Topics.Include(t => t.AspNetUsers).Include(t => t.Categories).Include(t => t.Regions).Where(t => t.CategoryId == 1); 7 return View(await topics.ToListAsync(), await topics.ToListAsync()); 8 }

このようなエラーが返ってきました。

引数1:は'System.Collections.Generic<(ソリューション名).Models.Topics>'から'string'へ変換することはできません 引数2:は'System.Collections.Generic<(ソリューション名).Models.Topics>'から'string'へ変換することはできません

該当のソースコード

Controller

C#

1 // GET: NewTopics 2 public async Task<ActionResult> Index() 3 { 4 // DBのTopicsテーブルを全件 5 var topics = db.Topics.Include(t => t.AspNetUsers).Include(t => t.Categories).Include(t => t.Regions); 6 var TurfTopics = db.Topics.Include(t => t.AspNetUsers).Include(t => t.Categories).Include(t => t.Regions).Where(t => t.CategoryId == 1); 7 8 return View(await topics.ToListAsync()); 9 }

View

c#

1 <div class="tabs"> <!-- ここからタブの切り替えボタン --> 2 <input id="all" type="radio" name="tab_item" checked> 3 <label class="tab_item tab_item_all" for="all">ALL</label> 4 <input id="turf" type="radio" name="tab_item"> 5 <input id="otherwise" type="radio" name="tab_item"> 6 <label class="tab_item tab_item_otherwise" for="otherwise">その他</label> 7 <div class="tab_content clearfix" id="all_content"><!-- ここまでタブの切り替えボタン --> 8 9 <table border="0"><!-- ここからカテゴリーを問わず全件表示 --> 10 <tr class="note clearfix"> 11 <th>NO.</th> 12 <th>タイトル</th> 13 <th>レス数</th> 14 <th>HN</th> 15 <th colspan="1">最終コメント日時</th> 16 <th>カテゴリー</th> 17 <th>地域</th> 18 <th>閲覧数</th> 19 </tr><!--/.note--> 20 @foreach (var item in Model) 21 { 22 <tr class="bbs_line clearfix"> 23 <td class="bbs_number">@Html.DisplayFor(modelItem => item.Id)</td> 24 <td class="bbs_title">@Html.ActionLink(item.Title, "Index", new { controller = "Responses", id = item.Id })</td> 25 <td class="bbs_comment_count">@Html.DisplayFor(modelItem => item.ResponseCount)</td> 26 <td class="bbs_name">@Html.DisplayFor(modelItem => item.AspNetUsers.HandleName)</td> 27 <td class="bbs_date">@Html.DisplayFor(modelItem => item.RecentResDate)</td> 28 <td class="bbs_category">@Html.DisplayFor(modelItem => item.Categories.Name)</td> 29 <td class="bbs_region">@Html.DisplayFor(modelItem => item.Regions.Name)</td> 30 <td class="bbs_reading_count">@Html.DisplayFor(modelItem => item.ViewCount)</td> 31 </tr> 32 } 33 </table><!-- ここまでカテゴリーを問わず全件表示 --> 34 35 36 37 38

試したこと

自分なりに調べたところ、Tupleという機能を使えばいいのではないかと考えましたが、Tupleの使い方も理解できなかったため、試したことに加筆できず申し訳ありません。

もし、Controllerのreturn View()の扱いに成功した場合は、foreachの引数のModelにより詳細な名前となるプロパティを加えるのではないかと考えました

c#

1 2 3 @foreach (var item in Model.All) 4 { 5 (省略) 6 } 7 8 @foreach (var item in Model.turf) 9 { 10 (省略) 11 }

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

VS2017
Windows7
.Net Framework 4.6.1
MVC5

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

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

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

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

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

x_x

2018/08/24 08:38

文章が途切れています。確認してください
pomu.pomupomu

2018/08/24 08:47

字数制限で乱れたまま送信されていたみたいでした。字数の限りできるだけ書いて再投稿しました。ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/08/24 10:37

相変わらず質問文が長くてポイントが読み切れないです。カテゴリで絞り込んで表示したいならクエリに where 句を使うなりして絞り込んだ結果を表示すればよいのでは?
退会済みユーザー

退会済みユーザー

2018/08/24 10:43

どうもそうではなさそうですが、とすると何をしたいのですか? X_X さんが回答で言われるように、複数のクエリから取得できる複数のデータから単一のモデルを作ってそれを View に渡したい? であればそれはどのようなものか、先のスレッドで書いた既存の EDM に定義されているクラスを例に、具体的に(あくまで具体的に)書いてください。
退会済みユーザー

退会済みユーザー

2018/08/25 01:54 編集

ひょっとして、Topics テーブルの全レコードの一覧と、カテゴリーで絞り込んだレコード一覧の 2 つのデータをアクションメソッドで取得して、その両方を単一の View 渡し、その View 内で並べて表示したいと言ってます? であれば、x_x さんが回答に書かれた通りの解決案になると自分も思います。その他、部分ビューを使う方法。でも、いずれも自分はお勧めしません。理由は下記。
退会済みユーザー

退会済みユーザー

2018/08/25 01:55 編集

全レコードの一覧とカテゴリーで絞り込んだレコード一覧を並べて表示するということは普通はしないと思うのですが。ユーザーにとっては見づらいだけのような気がします。それより、表示するレコード一覧は一つのみにしておいて、初期画面では[ALL」で表示、ユーザーが[芝]等をクリックするとそれで絞り込んで全レコード一覧を書き換えて表示するようにした方がユーザーフレンドリーだと自分は思います。さらに、ユーザーが[芝]等を選択して絞り込んだ一覧を表示する際は Ajax.BeginForm など ajax を利用して部分ビューを切り替えるようにするのが自分的にはお勧めです。
pomu.pomupomu

2018/08/25 09:18 編集

すみません、情報はあった方が良いかと思ってたのですが、次から短くします。また、返信が遅くなりもうし訳ありません。自分でHTMLとCSSを調べて見た限りでは、表示したいものをクエリで全て発行しておいて、必要ないもの以外はhidden属性で隠しておいて、タブを押した際に表示したいものを切り替えるのが主流なのかと思っていました。(Surferさんのおっしゃる通り、ユーザーフレンドリーではなくない?と疑問ではあったのですっきりしました)
退会済みユーザー

退会済みユーザー

2018/08/25 09:23

情報不足は当然問題外ですが、情報提供する際に、無ければいけないものと、無い方がいいものがあると思います。そこを考えていただければと思います。
pomu.pomupomu

2018/08/25 09:23 編集

ひょっとして・・・のところの部分がまさに望んでいたことです。モデルの中にさらにモデルを定義すると[芝]等の表示件数が少ないうちはいいのですが、増えるにつれてだんだん処理が重くなるように僕も思います。なので、ajaxを利用することにして部分ビューの切り替えに挑戦してみようと思います。ご指摘ありがとうございました。
pomu.pomupomu

2018/08/25 09:25

わかりました。回答していただくに当たって必要の是非はより一層精査するようにします。
退会済みユーザー

退会済みユーザー

2018/08/27 01:00

結局このスレッドはどうしたいのでしょうか? 最初に質問者さんがやりたかったこと(上の私の 2018/08/25 09:52 のコメント「ひょっとして・・・」に書いた通りと理解)を進めて解決策を出したいのですか? そうであれば、x_x さんの回答から先に進めてください。分からないことがあれば聞いてください。
退会済みユーザー

退会済みユーザー

2018/08/27 01:49 編集

それとも、このスレッドで最初に質問者さんがやりたかったことから方針転換して「ajaxを利用することにして部分ビューの切り替えに挑戦してみようと思います」という方向に進みたいのでしょうか? であれば、このスレッドはクローズして新たに別のスレッドを立てて質問してください。このスレッドで続けられては、ごちゃごちゃになって訳が分からなくなります。後から検索などでこのスレッドにたどり着いた人のことも考えるとそうすべきです。
pomu.pomupomu

2018/08/27 04:40

とりあえず解決の目処がたってからベストアンサーにしようかと考えていました。すみません。また、ajaxを利用することに転換して作業を進めようと考えています。なのでまた疑問があれば別途質問を投げるようにします。(クローズにする、というのはベストアンサーを選ぶ、というのと同義であってますでしょうか。間違っていた場合、指摘いただけたらとおもいます。)
退会済みユーザー

退会済みユーザー

2018/09/30 05:54 編集

約30分前に質問者さんが質問を編集したとの通知が運営からありましたが、どこをどう編集したのですか? そもそもこのスレッドは終ったと思っていたのですが違うのですか?
pomu.pomupomu

2018/09/30 12:44

すみません、修正していないです。間違えて通知が行くボタンを押してしまいました。久しぶりに読み返している時に、間違えて編集と更新ボタンを押し、読み込み中止を押しましたが間に合わず通知を送ってしまいました。本当にお騒がせして申し訳ありません。
guest

回答1

0

ベストアンサー

新たに複数のモデルを保持できるモデルを定義するとか

C#

1IEnumerable<Models.Topics>

それも面倒ならViewBagに入れてしまうとか。
ALLと同じ内容であるなら、スクリプトでフィルタする手もあります。

投稿2018/08/24 08:43

x_x

総合スコア13749

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

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

pomu.pomupomu

2018/08/24 09:22

回答ありがとうございます。あまりにも初心者でかつ独学なので、具体的な手順がわからず、すぐに解決の返答ができないのですが、複数のモデルを保持できるモデルを定義するというのを調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問