繁体   English   中英

如何为 DateTime 参数设置默认值

[英]How to set a default value to a DateTime parameter

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

我建议将 DateTime 设置为可为空的public ActionResult BudgetVSActualTabular(DateTime? startDate)

如果 DateTime 为空,您可以在控制器内部使用 DateTime.HasValue 设置默认值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM