Я пытаюсь отформатировать дату, представленную MVC's ASP.NET TextBoxFor с помощью значения представления со строгим контролем типов. Дата nullable поэтому, если это является пустым, я хочу видеть пустое значение, иначе я хочу видеть его в формате MM/dd/yyyy.
<%= Html.TextBoxFor(model => model.BirthDate, new { style = "width: 75px;" })%>
Спасибо,
Paul Speranza
Вы пытались просто пройти в формате даты, который вы хотели бы?
Html.TextBoxFor(model => model.BirthDate.ToString("MM/dd/yyyy"),
new { style = "width: 75px;" })
Вы пытались заставить культуру вашего текущего приложения потока? Вы можете переопределить его в Web.config, используя эту строку (в теге):
<!-- Default resource files are set here. The culture will also change date format, decimal, etc... -->
<globalization enableClientBasedCulture="false" culture="en-US" uiCulture="en-US"/>
Сначала добавьте это расширение для получения пути к свойству:
public static string GetPropertyPath<TEntity, TProperty>(Expression<Func<TEntity, TProperty>> property)
{
Match match = Regex.Match(property.ToString(), @"^[^\.]+\.([^\(\)]+)$");
return match.Groups[1].Value;
}
Затем добавьте эти расширения для HtmlHalper:
public static MvcHtmlString DateBoxFor<TEntity>(
this HtmlHelper helper,
TEntity model,
Expression<Func<TEntity, DateTime?>> property,
object htmlAttributes)
{
DateTime? date = property.Compile().Invoke(model);
// Here you can format value as you wish
var value = date.HasValue ? date.Value.ToShortDateString() : string.Empty;
var name = ExpressionParseHelper.GetPropertyPath(property);
return helper.TextBox(name, value, htmlAttributes);
}
Также вы должны добавить этот код jQuery:
$(function() {
$("input.datebox").datepicker();
});
datepicker - это плагин jQuery.
И теперь вы можете использовать его:
<%= Html.DateBoxFor(Model, (x => x.Entity.SomeDate), new { @class = "datebox" }) %>
Это грязный прием, но, похоже, он работает.
<%= Html.TextBoxFor(model => model.SomeDate,
new Dictionary<string, object> { { "Value", Model.SomeDate.ToShortDateString() } })%>
Вы получаете привязку модели и можете переопределить свойство HTML "value" текстового поля с форматированной строкой.
Простое решение - не использовать строго типизированный помощник.
<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>