8

我有一个具有一些日期和时间属性的模型。

时间属性具有以下 DataAnnotation:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm tt}")]

日期属性有:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

然而,这些只有在我使用@Html.EditorFor()而不是@Html.TextBoxFor().

我目前的情况不允许我使用EditorFor,那么我该如何强制TextBoxFor尊重这些格式字符串?

4

4 回答 4

14

您可以尝试以下方法:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}")

还有一个采用 html 属性的重载,因此您可以设置 CSS 类、连接日期选择器等:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })
于 2013-07-23T21:18:08.050 回答
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)

这样,所有日期时间变量的格式都可以通过一个函数来控制。对我来说工作得很好(对于DateTimeDateTime?属性),虽然我不确定在运行时编译表达式是否是一个好主意。

于 2013-09-10T19:44:35.180 回答
0

我为此做了一个选择:

@Html.TextBoxFor(m => m.Patient.DOB, new { @Value = string.Format("{0:MM/dd/yyyy}", Model.EndDate)  })
于 2014-03-11T16:51:25.963 回答
0

在 MVC5 中,您可以调用视图中定义的显示格式,避免重复日期时间格式,只需按以下方式对其进行编码:

@Html.TextBoxFor(m => m.TotalAmount, Model.DOB.GetDateTimeFormats()[0])
于 2015-09-14T11:46:04.380 回答