@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”的情况下,我怎样才能实现这样的效果
@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”的情况下,我怎样才能实现这样的效果
首先,不要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
,那么这些值将始终优先。
其次,您正在使用 HTML5date
输入类型。在支持 HTML5 输入类型的浏览器中,为日期时间、日期或时间提供的值必须采用 ISO 格式。对于约会,这意味着YYYY-MM-DD
。如果没有像那样提供值,那么浏览器会认为它是垃圾并丢弃它,让控件就好像没有提供值一样。
此外,FWIW,您不需要在匿名对象的每个成员前面加上@
. 从技术上讲,它不会伤害任何东西,但它是代码气味。@
前缀用于转义语言关键字。class
例如,你不能直接使用它,因为它是一个关键字,所以你必须使用它@class
。但是,像placeholder
andtype
不是关键字,因此不需要前缀@
。