Разделение даты и времени на дату и время в ASP.NET MVC - PullRequest
3 голосов
/ 15 ноября 2010

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

Однако первая часть создания шаблонов Editor не работает для меня. Я скопировал 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, но я не знаю как.

Ответы [ 2 ]

8 голосов
/ 15 ноября 2010

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

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

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

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

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

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

1 голос
/ 15 ноября 2010

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

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

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

...