如何将默认值设置为DateTime参数

在我的MVC应用程序中,我想将默认值设置为DateTime参数。

 [HttpPost] public ActionResult BudgetVSActualTabular(DateTime startDate) { var Odata = _db.sp_BudgetedVsActualTabular(startDate).ToList(); string[] monthName = new string[12]; for (int i = 0; i < 12;i++ ) { DateTime date = startDate; date = date.AddMonths(i); monthName[i] = date.ToString("MMMM") + " " + date.Year.ToString(); } ViewBag.startDate = new SelectList(_db.DaymonFinancialYears, "startDate", "DateRange"); var MonthName = monthName.ToList(); ViewBag.Bdata = Odata; ViewBag.Cdata = MonthName; return View(); } 

您不能将null设置为DateTime但您可以使用Nullable DateTime参数:

 [HttpPost] public ActionResult BudgetVSActualTabular(DateTime? startDate = null ) { if (startDate == null) { startDate = new DateTime(2016, 06, 01); } //You should pass startDate.Value var Odata = _db.sp_BudgetedVsActualTabular(startDate.Value).ToList(); } 

您可以使用此语法的default关键字

 public ActionResult BudgetVSActualTabular(DateTime startDate = default(DateTime)) 

这样可以在不传递任何参数的情况下调用该方法,并且在您的方法中, startDate变量将等于DateTime.MinValue

如果您需要默认值是特定日期而不是DateTime.MinValue您可以编写一个简单的测试

 public ActionResult BudgetVSActualTabular(DateTime startDate = default(DateTime)) { if(startDate == DateTime.MinValue) startDate = new DateTime(2014,6,1); // After the check for a missing parameter pass the startDate as before var Odata = _db.sp_BudgetedVsActualTabular(startDate).ToList(); ..... } 

从C#4.0开始可以使用命名和可选(默认)参数。 如果你使用的是旧版本,你可能会重载你的方法:

  public ActionResult BudgetVSActualTabular() { return BudgetVSActualTabular(new DateTime(2014,6,1)); }