c# - visual - Muestra la propiedad del modelo de fecha y hora como una cadena de tiempo de fecha corta
formato fecha datetime c# (2)
Soy nuevo con MVC2 y tengo un problema de formato. Tengo una propiedad DateTime en mi modelo de empleado que me gustaría que se muestre con la fecha corta.
Sin embargo, esto no parece ser el método correcto.
1 <div class="editor-field">
2 <%: Html.TextBoxFor(model => model.DateRequested.ToShortDateString()) %>
3 <%: Html.ValidationMessageFor(model => model.DateRequested) %>
4 </div>
La línea 2 arroja esta excepción:
Las plantillas solo se pueden usar con acceso de campo, acceso a propiedades, índice de matriz de dimensión única o expresiones de indizador personalizadas de parámetro único.
¿Cuál es la forma correcta de manejar el formateo en mvc?
Intente decorar su propiedad de modelo de vista con el atributo [DisplayFormat]
:
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime DateRequested { get; set; };
y en su vista use Html.EditorFor
helper:
<div class="editor-field">
<%: Html.EditorFor(model => model.DateRequested) %>
<%: Html.ValidationMessageFor(model => model.DateRequested) %>
</div>
o si insistes en usar textbox helper (no sé por qué lo harías, pero de todos modos, así es cómo):
<div class="editor-field">
<%: Html.TextBox("DateRequested", Model.DateRequested.ToShortDateString()) %>
<%: Html.ValidationMessageFor(model => model.DateRequested) %>
</div>
Si desea seguir con un método html helper, intente esto:
public static MvcHtmlString TextBoxDateTime<TModel>(this HtmlHelper<TModel> helper,
Expression<Func<TModel, DateTime>> expression, int tabIndex = 1)
{
var meta = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
var propertyName = ExpressionHelper.GetExpressionText(expression);
var input = new TagBuilder("input");
input.MergeAttribute("id",
helper.AttributeEncode(helper.ViewData.TemplateInfo.GetFullHtmlFieldId(propertyName)));
input.MergeAttribute("name",
helper.AttributeEncode(
helper.ViewData.TemplateInfo.GetFullHtmlFieldName(propertyName)));
input.MergeAttribute("value", ((DateTime)meta.Model).ToShortDateString());
input.MergeAttribute("type", "text");
input.MergeAttribute("class", "text cal");
input.MergeAttribute("tabindex", tabIndex.ToString());
input.MergeAttributes(helper.GetUnobtrusiveValidationAttributes(ExpressionHelper.GetExpressionText(expression), meta));
return MvcHtmlString.Create(input.ToString());
}