0

私はコントローラーに次のコードを持っています:

public ActionResult Index(string date)
        {
            var topsong = db.TopSongs;
            var topDate = db.TopDates;

            var latestDate = topDate.OrderByDescending(d => d.Date).FirstOrDefault();


           if (date == "PreviousDate")
            {
                latestDate = topDate.Where(d => d.Date < latestDate.Date).OrderByDescending(d => d.Date).FirstOrDefault();                
            }

            if (date == "NextDate")
            {
                latestDate = topDate.Where(d => d.Date > latestDate.Date).OrderBy(d => d.Date).FirstOrDefault();
            }           
.... 
return View();

}

ビューのコードは次のとおりです。

@Html.ActionLink("Previous Week's Songs", "Index", new { date = "PreviousDate" }) <br />
@Html.ActionLink("Next Week's Songs", "Index", new { date = "NextDate" })

ユーザーがPreviousDateをクリックすると、コントローラーに返送され、前の日付が選択されます。初めてそれはうまくいきます。問題は2回目になります。latestDateは再度計算されますが、latestDateはlatestDateを再度計算しないため、基本的にPreviousDateを使用する必要があります。PreviousDateを永続化する方法はありますか?または、ビューから戻しますか?

次に例を示します。latestDateが2012年8月27日の場合、previousDateを押すと最初に読み込まれます。日付は2012年8月25日ですが、2012年8月25日をlatestDateとして使用する代わりにPreviousDateをもう一度押すと、08が再び使用されます。 /27/2012を最新の日付として。

TopDateクラス:

public class Top10Date
    {
        [Key]
        public int DateId { get; set; }
        public DateTime Date { get; set; }        
    }
4

2 に答える 2

2

あなたはおそらくやりたいでしょう:

return View(latestDate);

したがって、モデルバインダーがそれをピックアップします

于 2012-08-27T23:49:04.117 に答える
2

表示されている現在の日付と、PreviousDate および NextDate の「サブアクション」をコントローラーに渡す必要があります。

コントローラーで:

    public ActionResult Index(string date, DateTime? latestDate)
    {
        var topsong = db.TopSongs;
        var topDate = db.TopDates;

        if (!latestDate.HasValue)
            latestDate = (DateTime?)(topDate.OrderByDescending(d => d.Date).FirstOrDefault());


       if (date.Value == "PreviousDate")
        {
            latestDate = (DateTime?)(topDate.Where(d => d.Date < latestDate.Date).OrderByDescending(d => d.Date).FirstOrDefault());                
        }

        if (date.Value == "NextDate")
        {
            latestDate = (DateTime?)(topDate.Where(d => d.Date > latestDate.Date).OrderBy(d => d.Date).FirstOrDefault());
        }

        .... 

        ViewBag.latestDate = latestDate

        return View();
    }

その後

@Html.ActionLink("Previous Week's Songs", "Index", new { date = "PreviousDate", ViewBag.latestDate }) <br />
@Html.ActionLink("Next Week's Songs", "Index", new { date = "NextDate", ViewBag.latestDate })
于 2012-08-28T00:03:42.963 に答える