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



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



модель основана на Linq2SQL, поле является DateTime на SQL и в модели сущности.



ошибка:



<%= 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".

432   17  

17 ответов:

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

затем:

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

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

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

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

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

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

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

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

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

[DataType(DataType.Date)]

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

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

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

атрибут 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" }) %>

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

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

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

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

если не убежал за мной то покажи 08-01-2010 против прогноза 08/01/2010.

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

/ / datimetime отображается в datePicker 11/24/2011 12: 00: 00 AM

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

сценарий:

    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>

надеется, что это поможет..

конечно, вы можете использовать Html.В. Но если вы хотите использовать 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);
    }
}

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

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

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

модель:

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

View:

<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">

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

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

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

Если вы используете 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" 
})

Comments

    Ничего не найдено.