2014-01-27 3 views
7

Я использую MVC4 с движком просмотра Razor. Мой контроллер выглядит следующим образом:MVC4 Выбор даты с датой по умолчанию

public ActionResult Index() 
{ 

    return View(new EmployeeIndexViewModel 
    { 

     ToDate = DateTime.Now 

    }); 

} 

Мой вид Модель выглядит следующим образом:

public class EmployeeIndexViewModel 
{ 
    [DataType(DataType.Date)] 
    public DateTime ToDate { get; set; } 
} 

На мой взгляд, у меня есть простой EditorFor() вызов:

@Html.EditorFor(model => model.ToDate) 

Но все-таки получить по умолчанию (замаскированное) значение в моей коллекции дат:

Empty Date Picker

ВОПРОС:

Как я могу получить текущую дату (от контроллера), чтобы отобразить здесь вместо этого?

ответ

17

Моя проблема не была проблемой jQuery или MVC4, как я изначально думал. Это связано с тем, как браузер, совместимый с HTML5, отображает выбор даты. Я переносил дату на представление в неправильном формате.

Я изменил мой ViewModel к этому, и теперь дата населяет правильно:

public class EmployeeIndexViewModel 
{ 
    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
    public DateTime ToDate { get; set; } 
} 

Correctly displaying date time

+0

Одна вещь, которую я хотел бы отметить, заключается в том, что формат DataFormatString отличается от того, что на самом деле отображается. Если бы вы использовали DataFormatString из MM/dd/yyyy, тогда это не сработало. Кажется, вам нужно использовать yyyy-MM-dd, независимо от того, как ваша дата фактически отформатирована. – CooperAtlas

+0

Вы передали 'yyyy-MM-dd' в атрибуте, но я вижу на вашей фотографии' MM/dd/yyyy'. Что происходит? Я спрашиваю, потому что я хочу изменить этот порядок в моем представлении, но у меня та же проблема, что и на картинке. –

2

Вы должны сделать это от уровня JQuery:

$(".selector").datepicker("setDate", yourDate); 

Например, если вы хотите установить текущую дату:

$(".selector").datepicker("setDate", new Date()); 

Вы также можете попробовать добавить атрибут DisplayFormat в вашей модели представления класс, чтобы убедиться, что сборщик данных правильно интерпретирует ваш формат данных:

public class EmployeeIndexViewModel 
{ 
    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
    public DateTime ToDate { get; set; } 
} 
+0

Как бы вы отразить эти изменения в .cshtml файле? Вы удалили бы вызов '.EditorFor()' и статически вставляли текстовое поле? –

+0

Попробуйте сначала добавить атрибут, который я предложил, это, пожалуй, самое простое решение. –

+0

Я сделал это, Date Picker по-прежнему отображается так же, как на скриншоте в моем вопросе. –

1

U можно установить вход или вход с типом = "дата" (DateTimePicker) с помощью JQuery.

В связи Бритва

@ Html.TextBoxFor (м => m.StartedDate, новый {@id = "MyDate", @type = "Дата", @class = "форма-контроль"})

Вот код JS

$(document).ready(function() { 
     var dateNewFormat, onlyDate, today = new Date(); 

     dateNewFormat = today.getFullYear() + '-'; 
     if (today.getMonth().length == 2) { 

      dateNewFormat += (today.getMonth() + 1); 
     } 
     else { 
      dateNewFormat += '0' + (today.getMonth() + 1); 
     } 

     onlyDate = today.getDate(); 
     if (onlyDate.toString().length == 2) { 

      dateNewFormat += "-" + onlyDate; 
     } 
     else { 
      dateNewFormat += '-0' + onlyDate; 
     } 

     $('#mydate').val(dateNewFormat); 
    }); 
Смежные вопросы