Datetime 显示格式属性';与@Html.TextBoxFor()一起使用时,s DataFormatString参数不起作用
我有一个带有日期和时间属性的模型 时间属性具有以下DataAnnotation:Datetime 显示格式属性';与@Html.TextBoxFor()一起使用时,s DataFormatString参数不起作用,datetime,asp.net-mvc-4,data-annotations,string-formatting,html-helper,Datetime,Asp.net Mvc 4,Data Annotations,String Formatting,Html Helper,我有一个带有日期和时间属性的模型 时间属性具有以下DataAnnotation: [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm tt}")] 日期属性为: [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 但是,只有当我使用@Html.EditorFor()而不是@Html.T
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm tt}")]
日期属性为:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
但是,只有当我使用@Html.EditorFor()
而不是@Html.TextBoxFor()
时,才会考虑这些问题
我目前的情况不允许我使用
编辑器for
,因此如何强制文本框for
遵守这些格式字符串?您可以尝试以下操作:
@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}")
还有一个重载,它接受html属性,因此您可以设置CSS类、连接日期选择器等:
@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })
也许可以创建一个扩展方法:
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 });
}
这样,所有datetime变量的格式都可以通过单个函数进行控制。对我来说效果很好(对于
DateTime
和DateTime?
属性),尽管我不确定在运行时编译表达式是否是个好主意。我为此做了一个选择:
@Html.TextBoxFor(m => m.Patient.DOB, new { @Value = string.Format("{0:MM/dd/yyyy}", Model.EndDate) })
在MVC5中,您可以调用视图中定义的显示格式,避免重复datetime格式,只需按以下方式编码即可:
@Html.TextBoxFor(m => m.TotalAmount, Model.DOB.GetDateTimeFormats()[0])
为什么必须使用
TextBoxFor
?使用EditorFor
s验证无法正常工作。我们一直在调查,但没有发现任何问题。验证可能与您在应用程序中使用的CultureInfo
有关。您能详细说明一下吗?正如我提到的,这可能是由于您环境的语言和日期时间设置造成的为什么@class=“input large”
?只是说您可以应用您的样式。例如jquery日期选择器。我想我最终会坚持这个解决方案。我使用的是MVC5,有同样的问题,但上面的解决方案不起作用@Html.LabelFor(model=>model.DateOfBirth,htmlAttributes:new{@class=“control label col-md-2”})@Html.TextBoxFor(model=>model.DateOfBirth,“{0:dd MM yyyy}”,new{htmlAttributes=new{@class=“form control”})@Html.ValidationMessageFor(model=>model.DateOfBirth,”,new{@class=“文本危险”})`
@Html.TextBoxFor(m => m.TotalAmount, Model.DOB.GetDateTimeFormats()[0])