Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DropDownListFor将null返回给控制器_C#_Asp.net Mvc - Fatal编程技术网

C# DropDownListFor将null返回给控制器

C# DropDownListFor将null返回给控制器,c#,asp.net-mvc,C#,Asp.net Mvc,我知道还有其他类似的问题,但我在任何地方都找不到有效的解决方案 关键是,我希望用户在dropDownList中选择日期,将该日期作为action方法的参数,并根据所选日期显示数据库中的结果。但一直以来,在dropDownList中选择任何项目后,它都会将null返回给控制器 以下是我的控制器的方法: public ActionResult Index(DateViewModel dateViewModel) { dateViewModel.Dates = GetD

我知道还有其他类似的问题,但我在任何地方都找不到有效的解决方案

关键是,我希望用户在dropDownList中选择日期,将该日期作为action方法的参数,并根据所选日期显示数据库中的结果。但一直以来,在dropDownList中选择任何项目后,它都会将null返回给控制器

以下是我的控制器的方法:

    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();"})}