我是一名新的c#開發人員,我有一個填充字符串日期的下拉列表,格式如下:「2017年7月」。列表中最多可以有12個條目。在html視圖中調用onchange事件的控制器函數
當用戶選擇日期時,我想將該選擇傳遞給控制器方法,將其轉換爲DateTime格式,然後使用該日期進行進一步處理。
如何將用戶選擇傳遞給控制器以便它可以被轉換和使用?我已經在下面列出了註釋掉的代碼,以顯示我想如何執行轉換。把日期交給控制器是我的挑戰。
我已經看過類似的問題在這個網站上,他們都似乎過於複雜(也許是由於我的天真),但我希望有一個更簡化的解決方案。
HTML視圖代碼
@Html.DropDownList("selectList", Model.ReverseMonthsLists())
查看型號代碼
public IEnumerable<SelectListItem> ReverseMonthsLists()
{
var selectListItems = GetDates()
.Select(_ => _.ToString("MMM yyyy"))
.Select((dateString, index) => new SelectListItem
{ Selected = index == 0, Text = dateString, Value = dateString })
.ToList();
return selectListItems;
}
public static IEnumerable<DateTime> GetDates()
{
DateTime startDate = new DateTime(2017, 6, 1).Date;
var currentDate = DateTime.Now.Date;
int numberOfMonthsToShow = (currentDate.Year - startDate.Year) * 12 +
currentDate.Month - startDate.Month;
var dates = new List<DateTime>(numberOfMonthsToShow);
currentDate = currentDate.AddMonths(-1);
for (int i = 0; i < numberOfMonthsToShow; i++)
{
dates.Add(currentDate);
currentDate = currentDate.AddMonths(-1);
}
return dates;
}
控制器功能
public ActionResult Report_Performance()
{
//var newDate = DateTime.Parse(strDate); //<- Use newDate as parameter value into aVar to replace date at the end of the string
var aVar = Models.Reporting.ListingStatsReportingViewModel.GetStats(userCurrentService.CompanyId.Value, Models.Reporting.DateTimePeriod.Monthly, DateTime.Now.Date.AddMonths(-1));
return this.View(aVar);
}
John Wu,我遵循了你的建議,並使用了回帖後的方法。但我的選擇並未反映在屏幕上。刷新後,列表將恢復爲默認選擇。我該如何解決? – csharpMind
您將需要修改呈現列表的視圖,以確保它預先選擇提交的任何值。 –
我明白你在說什麼。但我不知道如何讓它發生。你能提供更具體的指導嗎? – csharpMind