我有这些代码,但编辑框中的值显示为“mm / dd / yyyy”
@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”
,我怎样才能实现这样的目标?答案 0 :(得分:0)
首先,不要直接设置value
属性。 Razor无论如何都会忽略这一点。绑定字段的值来自ModelState
,它本身由Request
,ViewBag/ViewData
和Model
中的值组成。因此,例如,如果您希望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
。但是,placeholder
和type
之类的内容不是关键字,因此不需要@
前缀。