如何在引导程序中使用日期类型格式编辑日期值

时间:2016-09-08 13:10:57

标签: date asp.net-mvc-4 html.textboxfor

我有这些代码,但编辑框中的值显示为“mm / dd / yyyy” enter image description here

@Html.TextBoxFor(m => m.StartDate, new { @Value = Model.StartDate.ToString("MM/dd/yyyy"), @placeholder= Model.StartDate.ToString("MM/dd/yyyy"), @class = "form-control", @type="date" })

如果显示的日期是数据库中的值而不是“mm / dd / yyyy”

,我怎样才能实现这样的目标?

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,不要直接设置value属性。 Razor无论如何都会忽略这一点。绑定字段的值来自ModelState,它本身由RequestViewBag/ViewDataModel中的值组成。因此,例如,如果您希望StartDate默认为"今天",那么您只需在返回视图之前使用操作中的模型填充模型:

model.StartDate = DateTime.Today;

或者,更好的是,您可以将模型类的属性更改为默认为今天:

private DateTime? startDate;
public DateTime StartDate
{
    get { return startDate ?? DateTime.Today; }
    set { startDate = value; }
}

请记住,如果您的行为恰好采用startDate之类的参数,或者您设置ViewBag.StartDate之类的内容,那么这些值将始终优先。

其次,您正在使用HTML5 date输入类型。在支持HTML5输入类型的浏览器中,日期时间,日期或时间的提供值必须为ISO格式。对于某个日期,这意味着YYYY-MM-DD。如果没有提供这样的值,那么浏览器认为它是垃圾并丢弃它,使控件保持好像没有提供任何值。

此外,FWIW,您不需要使用@为匿名对象的每个成员添加前缀。它在技术上不会伤害任何东西,但它有代码味道。存在@前缀以转义语言关键字。例如,使用class,您无法直接使用它,因为它是关键字,因此您必须使用@class。但是,placeholdertype之类的内容不是关键字,因此不需要@前缀。