2010-11-15 2 views
3

Я прочитал Scott Hanselman's post по этой теме. Я нашел another article, который, кажется, более простой подход. Второй из которых я решил попробовать.Сплит DateTime по дате и времени в ASP.NET MVC

Однако первая часть при создании EditorTemplates не работает для меня. Я скопировал DateTime.ascx и TimeSpan.ascx, если автор написал их. Затем я разделил поля на мой взгляд.

<div class="editor-label"> 
     <%= Html.LabelFor(model => model.LeaveRequest.DateOfLeave)%> 
    </div> 
    <div class="editor-field"> 
     <div class="date-container"> 
      <%= Html.TextBoxFor(model => model.LeaveRequest.DateOfLeave.Date)%> 
     </div> 
     <div class="time-container"> 
      <%= Html.TextBoxFor(model => model.LeaveRequest.DateOfLeave.TimeOfDay)%> 
     </div> 
     <div class="clear"> 
      <%= Html.ValidationMessageFor(model => model.LeaveRequest.DateOfLeave)%> 
     </div> 
    </div> 

Проблема, с которой я сталкиваюсь, заключается в том, что поведение, которое я получаю, не совпадает с тем, что объяснил этот автор, как должно произойти. Вот скриншот моих результатов.

Screenshot showing full DateTime in first field and all zeros in the second

Я должен что-то отсутствует, но я не могу сказать, что. Я читал эту статью несколько раз и не вижу, что мне не хватает. Я предполагаю, что должно быть что-то сказать программе для нас новые EditorTemplates, но я не знаю, как это сделать.

ответ

8

Вы пропустили тот факт, что оба решения Скотта, и решение, которое вы ссылки на не делают:

<%= Html.TextBoxFor(model => model.LeaveRequest.DateOfLeave.Date) %> 

Вместо этого они используют:

<%= Html.EditorFor(model => model.LeaveRequest.DateOfLeave.Date) %> 

И затем использовать собственный редактор, чтобы ограничить поля только для даты (вместо даты и времени).

Прокрутите вниз до Разделите поля Дата/Время заголовок статьи, на которую вы ссылаетесь, и немного почитайте о настраиваемых шаблонах редактора.

1

Вы также можете добавить значение по умолчанию на стороне клиента, если хотите.

<%= Html.TextBoxFor(model => model.LeaveRequest.DateOfLeave.Date, 
new { @Value= DateTime.Now })%> 

Это устанавливает начальное значение Texbox к текущему DateTime, но вы можете явно установить его на что угодно.

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