2016-01-20 5 views
1

В моем приложении MVC я хочу установить значения по умолчанию для параметра DateTime.Как установить значение по умолчанию для параметра 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(); 
} 

ответ

5

Вы не можете установить 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(); 

} 
+0

мне нужно установить дату на 2014-06-01, так что будет, как «[HttpPost] общественного ActionResult BudgetVSActualTabular (DateTime ? startDate = null) { } '? – Shahzad

+0

@simba ... Вы можете присвоить 'startDate' значение по умолчанию =' null', тогда вы можете установить его на '2014-06-01', если оно было' null' в вашем методе 'BudgetVSActualTabular'. –

2

Вы можете использовать default keyword с этим синтаксисом

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

Это позволит для вызова метода без прохождения какого-либо параметра и внутри вашего метода переменная startDate будет e кача к 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(); 
    ..... 
} 
+0

Мне нужно установить дату на 2014-06-01, так что это будет выглядеть как [HttpPost] public ActionResult BudgetVSActualTabular (DateTime? StartDate = null) {} '? – Shahzad

+0

Если это так, просто добавьте тест перед использованием переданного значения – Steve

1

Именованные и необязательные параметры (по умолчанию) доступны, начиная с C# 4.0. в случае, если вы используете старую версию, вы можете перегрузить ваш метод, как:

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

, но я хотел присвоить конкретное значение, не имеющее значения или null. Поэтому я должен был использовать то, что предложил Стив и другой пользователь. – Shahzad

+0

@simba Вы можете протестировать метод до вызова и изменить перегрузку (проверьте мой обновленный ответ) –

Смежные вопросы