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

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

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

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

Q&A

解決済

1回答

1352閲覧

ASP.NETでDBのデータを表示させたい

renton48

総合スコア17

ASP.NET

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

0グッド

0クリップ

投稿2019/04/11 23:30

編集2019/04/12 02:30

前提・実現したいこと

DBの最新日付のコンテンツデータをWEBに表示させたい

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

過去のお知らせデータは表示できるのですが、最新のお知らせデータは表示できません。 最新のお知らせデータには、DBに入力されている最新日付のContentsのみ表示させたいのですが やり方が判りません。 以下のソースコードでは最新のお知らせにはDBの初回レコードのみを表示するように1行目でBREAKするようにしています。 ですが、それでは最新日付のデータを取得できずに困っています。 どなたかご教示ください。 宜しくお願い申し上げます。

該当のソースコード

view

1@model IEnumerable<WebApplication4.Models.Info> 2 3<li><h5>最新のお知らせ</h5></li> 4 5@foreach (var item in Model) 6{ 7@Html.DisplayFor(modelItem => item.Contents) 8break; 9} 10//↑ここに最新の内容(contents)だけを表示させたいです↑ 11 12 13<li><h5>過去のお知らせ</h5></li> 14 15<table class="table table-sm"> 16 17@foreach (var item in Model) 18{ 19 <tr> 20 <th scope="row" width="5%"> 21 @Html.DisplayFor(modelItem => item.Post_Date) 22 </th> 23 <td width="95%"> 24 <a href="#" color:"#009978;"> 25 @Html.DisplayFor(modelItem => item.Title) 26 </a> 27 </td> 28 </tr> 29} 30 31</table>

model

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.ComponentModel; 6 7namespace WebApplication4.Models 8{ 9 public class Info 10 { 11 public int Id { get; set; } 12 13 [DisplayName("種別")] 14 public string Category { get; set; } 15 16 [DisplayName("タイトル")] 17 public string Title { get; set; } 18 19 [DisplayName("内容")] 20 public string Contents { get; set; } 21 22 [DisplayName("投稿日")] 23 public string Post_Date { get; set; } 24 25 [DisplayName("投稿期限")] 26 public string Post_Deadline { get; set; } 27 } 28}

Controller

1using System; 2using System.Collections.Generic; 3using System.Data; 4using System.Data.Entity; 5using System.Linq; 6using System.Net; 7using System.Web; 8using System.Web.Mvc; 9using WebApplication4.Models; 10 11namespace WebApplication4.Controllers 12{ 13 public class InfoesController : Controller 14 { 15 private MvcBasicContext db = new MvcBasicContext(); 16 17 // GET: Infoes 18 public ActionResult Index() 19 { 20 return View(db.Infos.ToList()); 21 //return View(db.Infos.ToList()); 22 } 23 24 public ActionResult Paging(int? id) 25 { 26 var pageSize = 3; 27 var pageNum = (id ?? 1) - 1; 28 29 var infos = (from a in db.Infos 30 orderby a.Post_Date descending 31 select a).Skip(pageSize * pageNum).Take(pageSize); 32 33 return View(infos.ToList()); 34 } 35 36 // GET: Infoes 37 public ActionResult Manage() 38 { 39 return View(db.Infos.ToList()); 40 } 41 42 43 // GET: Infoes/Details/5 44 public ActionResult Details(int? id) 45 { 46 if (id == null) 47 { 48 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 49 } 50 Info info = db.Infos.Find(id); 51 if (info == null) 52 { 53 return HttpNotFound(); 54 } 55 return View(info); 56 } 57 58 // GET: Infoes/Create 59 public ActionResult Create() 60 { 61 return View(); 62 } 63 64 // POST: Infoes/Create 65 // 過多ポスティング攻撃を防止するには、バインド先とする特定のプロパティを有効にしてください。 66 // 詳細については、https://go.microsoft.com/fwlink/?LinkId=317598 を参照してください。 67 [HttpPost] 68 [ValidateAntiForgeryToken] 69 public ActionResult Create([Bind(Include = "Id,Category,Title,Contents,Post_Date,Post_Deadline")] Info info) 70 { 71 if (ModelState.IsValid) 72 { 73 db.Infos.Add(info); 74 db.SaveChanges(); 75 return RedirectToAction("Index"); 76 } 77 78 return View(info); 79 } 80 81 // GET: Infoes/Edit/5 82 public ActionResult Edit(int? id) 83 { 84 if (id == null) 85 { 86 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 87 } 88 Info info = db.Infos.Find(id); 89 if (info == null) 90 { 91 return HttpNotFound(); 92 } 93 return View(info); 94 } 95 96 // POST: Infoes/Edit/5 97 // 過多ポスティング攻撃を防止するには、バインド先とする特定のプロパティを有効にしてください。 98 // 詳細については、https://go.microsoft.com/fwlink/?LinkId=317598 を参照してください。 99 [HttpPost] 100 [ValidateAntiForgeryToken] 101 public ActionResult Edit([Bind(Include = "Id,Category,Title,Contents,Post_Date,Post_Deadline")] Info info) 102 { 103 if (ModelState.IsValid) 104 { 105 db.Entry(info).State = EntityState.Modified; 106 db.SaveChanges(); 107 return RedirectToAction("Index"); 108 } 109 return View(info); 110 } 111 112 // GET: Infoes/Delete/5 113 public ActionResult Delete(int? id) 114 { 115 if (id == null) 116 { 117 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 118 } 119 Info info = db.Infos.Find(id); 120 if (info == null) 121 { 122 return HttpNotFound(); 123 } 124 return View(info); 125 } 126 127 // POST: Infoes/Delete/5 128 [HttpPost, ActionName("Delete")] 129 [ValidateAntiForgeryToken] 130 public ActionResult DeleteConfirmed(int id) 131 { 132 Info info = db.Infos.Find(id); 133 db.Infos.Remove(info); 134 db.SaveChanges(); 135 return RedirectToAction("Index"); 136 } 137 138 protected override void Dispose(bool disposing) 139 { 140 if (disposing) 141 { 142 db.Dispose(); 143 } 144 base.Dispose(disposing); 145 } 146 } 147} 148

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

Windows10 64bitのVisual Studio 2017で開発しています。
.NET 4.7のバージョンとなります。
DB はLocalDBを使っています。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/04/12 01:17 編集

前のスレッドでもお願いしましたが、開発環境(Core か否か、Visual Studio, OS, .NET のバージョン、DB は何かなど)を書きましょう。面倒とか、質問に直接関係ないとか思ってるかもしれませんが、意外と関係があったりします。 あと、MVC3 のタグが付いてますが、間違いでは? 間違いなら訂正してください。
退会済みユーザー

退会済みユーザー

2019/04/12 01:22

上のコメントでお願いしたことをやってもらったとしても、まだまだ圧倒的に情報不足です。 たぶん前のスレッド https://teratail.com/questions/181294 の続きではないかと想像してますが、それなら、質問欄に前のスレッドの URL を書いて、その旨説明してください。 最低限必要な情報として、モデルとして何をビューに渡しているか、できるだけ詳細に書いてください。
renton48

2019/04/12 03:32

情報不足の投稿申し訳ございません。修正させていただきました。宜しくお願い申し上げます。
退会済みユーザー

退会済みユーザー

2019/04/12 03:39

> 最低限必要な情報として、モデルとして何をビューに渡しているか、できるだけ詳細に書いてください。 話が通じてないようです。コントローラーのコードをベタっと張られても、その中で問題の View に紐づくアクションメソッドがどれかが分からないと「モデルとして何をビューに渡しているか」は分からないということが分かりませんか?
renton48

2019/04/12 03:54

>アクションメソッドがどれかが分からないと「モデルとして何をビューに渡しているか」は分からないということが分かりませんか? すいません、その辺りが理解できていないです。 今回のViewですと、使っているのは public ActionResult Index() だけになります。その中では「db.Infos.ToList()」を戻り値としており、Infoモデルの情報を渡しています。今回使いたいのは、その中の「public string Contents { get; set; }」となります。
guest

回答1

0

ベストアンサー

View にはコントローラーの Index アクションメソッド、

public ActionResult Index() { return View(db.Infos.ToList()); }

で List<Info> 型のオブジェクトを渡していて、その中で Info.Post_Date が最新(即ち、Post_Date で降順で並べて一番最初)の Info.Contents を表示したいと理解します。

最新で同じ日付が複数ある場合はどうするかという問題があるかと思いますが、とりあえずそれは置いといて、Post_Date で降順で並べて一番最初の一つだけということでよければ、View の中の質問者さんのコード、

@foreach (var item in Model) { @Html.DisplayFor(modelItem => item.Contents) break; }

に代えて、以下のようにして取得できると思います。

@Model.OrderByDescending(x => x.Post_Date).FirstOrDefault().Contents

お試しください。

PS. View に渡されるモデル List<Info> が空の場合があると FirstOrDefault() は null を返すので、その処置が必要なことに注意してください。

投稿2019/04/12 04:17

編集2019/04/12 04:26
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

renton48

2019/04/12 04:45

試してみたところやりたいことが実現できました。もっと勉強します。いつもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問