我是MVC2的新手,我遇到了格式化问题。我的Employee模型中有一个DateTime属性,我想用短日期时间显示。
然而,这似乎不是正确的方法。
1 <div class="editor-field">
2 <%: Html.TextBoxFor(model => model.DateRequested.ToShortDateString()) %>
3 <%: Html.ValidationMessageFor(model => model.DateRequested) %>
4 </div>
第2行抛出此异常:
模板只能用于字段 访问,财产访问, 单维数组索引,或 单参数自定义索引器 表达式。
在mvc中处理格式化的正确方法是什么?
答案 0 :(得分:28)
尝试使用[DisplayFormat]
属性装饰视图模型属性:
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime DateRequested { get; set; };
并在您的视图中使用Html.EditorFor
帮助程序:
<div class="editor-field">
<%: Html.EditorFor(model => model.DateRequested) %>
<%: Html.ValidationMessageFor(model => model.DateRequested) %>
</div>
或者如果你坚持使用文本框助手(不知道为什么你会这样,但无论如何):
<div class="editor-field">
<%: Html.TextBox("DateRequested", Model.DateRequested.ToShortDateString()) %>
<%: Html.ValidationMessageFor(model => model.DateRequested) %>
</div>
答案 1 :(得分:2)
如果您想坚持使用html辅助方法,请尝试以下方法:
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());
}