我是一名新的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