Дата только из TextBoxFor () - PullRequest
       73

Дата только из TextBoxFor ()

264 голосов
/ 25 декабря 2009

У меня проблемы с отображением единственной части даты DateTime в текстовое поле с использованием TextBoxFor <,> (expression, htmlAttributes).

Модель основана на Linq2SQL, поле DateTime для SQL ив модели Entity.

Ошибка:

<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>

Этот прием кажется устаревшим, любое строковое значение в объекте htmlAttribute игнорируется.

Ошибка:

[DisplayFormat( DataFormatString = "{0:dd/MM/yyyy}" )]
public string dtArrivalDate { get; set; }

Я хочу сохранить и отобразить только часть даты в представлении подробностей / редактирования без части "00:00:00".

Ответы [ 17 ]

352 голосов
/ 04 декабря 2012

MVC4 решил эту проблему, добавив новую перегрузку TextBoxFor, которая принимает параметр формата строки. Теперь вы можете просто сделать это:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}")

Существует также перегрузка, которая принимает атрибуты html, поэтому вы можете установить класс CSS, подключить указатели даты и т. Д .:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })
259 голосов
/ 11 августа 2011
<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>
229 голосов
/ 16 мая 2010
[DisplayName("Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime StartDate { get; set; }

Тогда:

<%=Html.EditorFor(m => m.StartDate) %>
49 голосов
/ 29 апреля 2010

Или используйте нетипизированные помощники:

<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>
25 голосов
/ 18 августа 2015

Это сработало для меня.

@Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 })
13 голосов
/ 25 декабря 2009

Не бойтесь использовать необработанный HTML.

<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />
3 голосов
/ 12 февраля 2013

Мне нужно было сохранить TextboxFor(), потому что использование EditorFor() меняет тип ввода на дату. Который, в Chrome, добавляет встроенный инструмент выбора даты, который испортил jQuery datepicker, который я уже использовал. Итак, чтобы продолжить использовать TextboxFor() И выводить только дату, вы можете сделать это:

<tr>
    <td class="Label">@Html.LabelFor(model => model.DeliveryDate)</td>
    @{
        string deliveryDate = Model.DeliveryDate.ToShortDateString();
    }
    <td>@Html.TextBoxFor(model => model.DeliveryDate, new { @Value = deliveryDate }) *</td>
    <td style="color: red;">@Html.ValidationMessageFor(model => model.DeliveryDate)</td>
</tr>
3 голосов
/ 19 октября 2012

Вы также можете использовать атрибуты HTML 5, применив эту аннотацию данных:

[DataType(DataType.Date)]

Но проблема в том, что этот браузер позволяет выбирать даты для браузеров HTML 5. Вам все еще нужен свой собственный инструмент выбора даты для браузеров без поддержки, а затем вы должны убедиться, что ваш инструмент выбора даты не отображается в дополнение к браузеру (Modernizr может сделать это легко), или скрыть браузер, если он появляется (сложно и я не знаю, насколько надежными были методы, которые я видел).

В конце концов, я пошел с Алексом, потому что в моей нынешней среде нет Modernizr, но если бы он был, я бы использовал это, чтобы условно отображать мой сборщик данных только в том случае, если браузер его еще не поддерживал.

1 голос
/ 28 декабря 2017

Если вы используете средство выбора даты Bootstrap, вы можете просто добавить атрибут data_date_format , как показано ниже.

      @Html.TextBoxFor(m => m.StartDate, new { 
@id = "your-id", @class = "datepicker form-control input-datepicker", placeholder = "dd/mm/yyyy", data_date_format = "dd/mm/yyyy" 
})
1 голос
/ 01 ноября 2017

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

Если вы хотите принудительно изменить формат / следующим образом:

@Html.TextBoxFor(model => model.dtArrivalDate, "{0:MM\\/dd\\/yyyy}")

Если не сбежал для меня, это покажет 08-01-2010 против ожидаемого 08/01/2010.

Также, если не удалось избежать, jQuery datepicker выберет другую defaultDate, в моем случае это было May 10, 2012.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...