Дата только из 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".
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