0

我有这些代码,但编辑框中显示的值是“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”的情况下,我怎样才能实现这样的效果

在此处输入图像描述

4

1 回答 1

0

首先,不要value直接设置属性。无论如何,Razor 几乎都会忽略这一点。绑定字段的值来自ModelState,它本身由来自RequestViewBag/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。但是,像placeholderandtype不是关键字,因此不需要前缀@

于 2016-09-08T13:19:57.327 回答