に次のコードがHomeController
あります。最新の日付を取得し、その日付に従って曲を表示します。
public ActionResult Index()
{
var topsong = db.TopSongs;
var topDate = db.TopDates;
var latestDate = topDate.OrderByDescending(d => d.Date).FirstOrDefault();
int dateId = topDate.OrderByDescending(d => d.DateId).FirstOrDefault().DateId;
var topTitles = topsong.Where(s => s.DateId == latestDate.DateId).ToList();
ViewBag.Message = "Top Songs";
ViewBag.latestDate = latestDate.Date.ToShortDateString();
return View(topTitles);
}
これはデータベースに入り、最新の日付 (2012 年 8 月 25 日としましょう) を選択し、この日付に対応するすべての曲を表示します。この部分は正常に機能しています。今、ユーザーがデータベースから前の日付または次の日付を選択し、それに応じて曲を表示できる機能を追加したいと考えています。
私がやろうとしているのは、ビューに前の日付と次の日付のボタンを追加することです。このような:
<h2>Songs Updated On: @ViewBag.latestDate</h2>
@Html.ActionLink("Previous Week's Songs", "Index", new { });
@Html.ActionLink("Next Week's Songs", "Index", new { });
私は MVC3 を初めて使用するので、前の日付と次の日付を表示する方法を教えてください。ビューでそれらを計算する場合、それらの日付の曲を表示するためにそれらをコントローラーに戻すにはどうすればよいですか?
日付テーブルの例を次に示します。 DateId Date 1 08/25/2012 2 08/20/2012 3 09/21/2012
更新されたコード:
HomeController のコードは次のとおりです。
public ActionResult Index(DateTime? date = null)
{
var topsong = db.TopSongs;
var topDate = db.TopDates;
var latestDate = (date.HasValue) ? date.Value : topDate.OrderByDescending(d => d.Date).FirstOrDefault();
//var latestDate = topDate.OrderByDescending(d => d.Date).FirstOrDefault();
int dateId = topDate.OrderByDescending(d => d.DateId).FirstOrDefault().DateId;
var topTitles = topsong.Where(s => s.DateId == latestDate.DateId).ToList();
/////
ViewBag.NextDate = topDate.Where(d => d.Date > latestDate).OrderBy(d => d.Date).FirstOrDefault();
ViewBag.PreviousDate = topDate.Where(d => d.Date < latestDate).OrderByDescending(d => d.Date).FirstOrDefault();
////////
ViewBag.Dates = topDate.Select(d => d.Date).Distinct();
ViewBag.latestDate = latestDate.Date.ToShortDateString();
return View(topTitles);
}
Index.cshtml のコード
@model IEnumerable<App.Models.TopSong>
@{
ViewBag.Title = "Top Songs";
var songs = ViewBag.songs;
}
<h1>@ViewBag.Message</h1>
<h2>Song's Updated On: @ViewBag.latestDate</h2>
@Html.ActionLink("Previous Week's Songs", "Index", new { date=@ViewBag.PreviousDate });
@Html.ActionLink("Next Week's Songs", "Index", new { date=@ViewBag.NextDate });
基本的に、アクションリンクを使用して前または次の日付に移動できるようにしたいだけです。上記のコードを試しましたが、うまくいきません。