我有一个带有一些日期和时间属性的模型。
时间属性具有以下DataAnnotation:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm tt}")]
日期属性包含:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
但是,只有在我使用@Html.EditorFor()
而非@Html.TextBoxFor()
时才会尊重这些。
我目前的情况不允许我使用EditorFor
,那么如何强制TextBoxFor
尊重这些格式字符串呢?
答案 0 :(得分:14)
您可以尝试以下操作:
@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" })
答案 1 :(得分:0)
也许可以创建一个扩展方法:
public static MvcHtmlString DateTimeFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
var compilationResult = expression.Compile();
TValue dateValue = compilationResult((TModel)html.ViewDataContainer.ViewData.Model);
var body = (MemberExpression)expression.Body;
return html.TextBox(body.Member.Name, (Convert.ToDateTime(dateValue)).ToCustomDateFormat(), new { id = body.Member.Name, datepicker = true });
}
方法ToCustomDateFormat可以是dateTime类型的扩展方法,它以所需的格式返回字符串值。
用法:
@Html.DateTimeFor(x=>x.AnyDateTimeProperty)
这样,可以从单个函数控制所有日期时间变量的格式。对我来说很好(对于DateTime
和DateTime?
属性),虽然我不确定在运行时编译表达式是不是一个好主意。
答案 2 :(得分:0)
我为此做了一个选项:
@Html.TextBoxFor(m => m.Patient.DOB, new { @Value = string.Format("{0:MM/dd/yyyy}", Model.EndDate) })
答案 3 :(得分:0)
在MVC5中,您可以调用视图中定义的显示格式,避免复制日期时间格式,只需按以下方式编码:
@Html.TextBoxFor(m => m.TotalAmount, Model.DOB.GetDateTimeFormats()[0])