如何将默认值设置为日期时间参数

本文关键字:日期 时间 参数 设置 默认值 | 更新日期: 2023-09-27 18:31:04

在我的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();
}

您可以将默认关键字与此语法一起使用

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

我建议将日期时间设置为可空public ActionResult BudgetVSActualTabular(DateTime? startDate)

在控制器中,您可以使用 DateTime.HasValue 在 DateTime 为 null 时设置默认值。

var nonNullableDate = startDate.HasValue ? startDate.Value : new DateTime();

[HttpPost]
public ActionResult BudgetVSActualTabular(DateTime? startDate)
{
    var nonNullableDate = startDate.HasValue ? startDate.Value : new DateTime();
    var Odata = _db.sp_BudgetedVsActualTabular(nonNullableDate).ToList();    
    string[] monthName = new string[12];    
    for (int i = 0; i < 12;i++ )
    {
        DateTime date = nonNullableDate;
        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();
}