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

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

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

Failed:

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

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

Failed:

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

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

Ответ 1

[DisplayName("Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime StartDate { get; set; }

Тогда:

<%=Html.EditorFor(m => m.StartDate) %>

Ответ 2

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

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

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

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })

Ответ 3

<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>

Ответ 4

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

<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>

Ответ 5

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

@Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 })

Ответ 6

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

<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />

Ответ 7

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

[DataType(DataType.Date)]

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

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

Ответ 8

Для меня мне нужно сохранить 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>

Ответ 9

Атрибут DisplayFormat не работал у меня в любой форме при начальной загрузке. Вместо этого я создал EditorTemplate:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>
<%=
    Html.TextBox("", Model.ToShortDateString(), new { @class = "date-range" }) %>

Ответ 10

Редактор шаблонов будет работать только для отображения. Если вы используете тот же редактор (что имеет смысл, потому что его редактор), и вы указали значение, подобное 31/01/2010, вы получите сообщение об ошибке, указывающее, что формат недействителен.

Ответ 11

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

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

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

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

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

Ответ 12

//Отображение даты и времени в datePicker - 11/24/2011 12:00:00 AM

//вы можете разбить это по пробелу и установить значение только на дату

Script:

    if ($("#StartDate").val() != '') {
        var arrDate = $('#StartDate').val().split(" ");
        $('#StartDate').val(arrDate[0]);
    }

Разметка:

    <div class="editor-field">
        @Html.LabelFor(model => model.StartDate, "Start Date")
        @Html.TextBoxFor(model => model.StartDate, new { @class = "date-picker-needed" })
    </div>

Надеюсь, это поможет.

Ответ 13

Конечно, вы можете использовать Html.EditorFor. Но если вы хотите использовать TextBoxFor и использовать формат из атрибута DisplayFormat, вы можете использовать его следующим образом:

@Html.TextBoxFor(model => model.dtArrivalDate, ModelMetadata.FromLambdaExpression(model => model.dtArrivalDate, ViewData).EditFormatString)

или создать следующее расширение:

public static class HtmlExtensions
{
    public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
    {
        return htmlHelper.TextBoxFor(expression, ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).EditFormatString, htmlAttributes);
    }
}

Ответ 14

Просто добавьте рядом с вашей моделью.

[DataType(DataType.Date)]
public string dtArrivalDate { get; set; }

Ответ 15

При использовании тегов-помощников в ASP.NET Core формат должен быть указан в формате ISO. Если не указано как таковое, связанные входные данные будут отображаться неправильно и будут отображаться как mm/dd/yyyy без значения.

Модель:

[Display(Name = "Hire")]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime? HireDate { get; set; }

Вид:

<input asp-for="Entity.HireDate" class="form-control" />

Формат также может быть указан в представлении, используя атрибут asp-format.

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

<input class="form-control" type="date" id="Entity_HireDate" 
    name="Entity.HireDate" value="2012-01-01">

Ответ 16

Я использую Globalize так, чтобы работать со многими форматами дат, поэтому используйте следующее:

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

Это автоматически изменит формат даты на настройки локали браузера.

Ответ 17

Если вы используете Bootstrap date picker, вы можете просто добавить атрибут 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" 
})