C# DropDownListFor将null返回给控制器
我知道还有其他类似的问题,但我在任何地方都找不到有效的解决方案 关键是,我希望用户在dropDownList中选择日期,将该日期作为action方法的参数,并根据所选日期显示数据库中的结果。但一直以来,在dropDownList中选择任何项目后,它都会将null返回给控制器 以下是我的控制器的方法:C# DropDownListFor将null返回给控制器,c#,asp.net-mvc,C#,Asp.net Mvc,我知道还有其他类似的问题,但我在任何地方都找不到有效的解决方案 关键是,我希望用户在dropDownList中选择日期,将该日期作为action方法的参数,并根据所选日期显示数据库中的结果。但一直以来,在dropDownList中选择任何项目后,它都会将null返回给控制器 以下是我的控制器的方法: public ActionResult Index(DateViewModel dateViewModel) { dateViewModel.Dates = GetD
public ActionResult Index(DateViewModel dateViewModel)
{
dateViewModel.Dates = GetDates();
return View(dateViewModel);
}
private IEnumerable<SelectListItem> GetDates()
{
var dbContext = new DbContext();
var dates = dbContext .TestResults
.Where(result => result.CompletedOn != null)
.OrderBy(result => result.CompletedOn)
.Select(result => result.CompletedOn).ToList();
var sortedDates = dates
.GroupBy(date => date.Month)
.Select(date => date.First())
.Select(date => new SelectListItem { Text = date.ToString("MMMM yy"), Value = date.Month.ToString() + " " + date.Year.ToString()})
.ToList();
return new SelectList(sortedDates, "Value", "Text");
}
[HttpPost]
public ActionResult ShowDepartmentArchive(string date)
{
//some logic with date here
return PartialView(depResults);
}
您有一个
SelectedDate
的隐藏输入,该输入的值将被绑定(将忽略
的值-您需要删除该输入。此外,您的查询已经生成了一个IEnumerable
,因此使用新的SelectList(..)会产生无意义的额外开销
要创建另一个相同的方法-只需使用返回sortedDates;
@StephenMuecke,谢谢您的回答。我已经按照您所说的更改了我的代码,但返回值仍然为null。我尝试使用断点对其进行调试,我可以看到我需要的值-您的POST方法需要是公共操作结果ShowDepartmentArchive(DateViewModel model)
@StephenMuecke,非常感谢,现在它可以工作了!
public class DateViewModel
{
[Display(Name = "Выбранная дата")]
public string SelectedDate { get; set; }
[Display(Name = "Выберите дату: ")]
public IEnumerable<SelectListItem> Dates { get; set; }
}
@model QA.Web.App.Models.DateViewModel
@using (Html.BeginForm("ShowDepartmentArchive", "Archive"))
{
@Html.Hidden("SelectedDate", Model.SelectedDate)
@Html.DropDownListFor(m => m.SelectedDate, Model.Dates, "Выберите
дату", new {onchange = "this.form.submit();"})}