Asp.net mvc 在EditorFor中显示[Date]值:“ToString”没有重载方法需要1个参数吗?
在我的库存资产模型中,定义了以下日期字段:Asp.net mvc 在EditorFor中显示[Date]值:“ToString”没有重载方法需要1个参数吗?,asp.net-mvc,datetime,razor,editorformodel,Asp.net Mvc,Datetime,Razor,Editorformodel,在我的库存资产模型中,定义了以下日期字段: [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)] public DateTime? acquired_date { get; set; } [DataType(DataType.Date)] [DisplayFormat(
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? acquired_date { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? disposed_date { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime created_date { get; set; }
然后,在我的编辑视图中,为每个日期值定义了以下表单组:
<div class="form-group">
@*@Html.LabelFor(model => model.acquired_date, htmlAttributes: new { @class = "control-label col-md-2" })*@
<span class="control-label col-md-2">Acquired Date:</span>
<div class="col-md-10">
@Html.EditorFor(model => model.acquired_date, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.acquired_date, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@*@Html.LabelFor(model => model.disposed_date, htmlAttributes: new { @class = "control-label col-md-2" })*@
<span class="control-label col-md-2">Disposed Date:</span>
<div class="col-md-10">
@Html.EditorFor(model => model.disposed_date, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.disposed_date, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@*@Html.LabelFor(model => model.created_date, htmlAttributes: new { @class = "control-label col-md-2" })*@
<span class="control-label col-md-2">Created Date:</span>
<div class="col-md-10">
@Html.EditorFor(model => model.created_date, new { htmlAttributes = new { @class = "form-control", @Value = Model.created_date.ToString("yyyy-MM-dd") } })
@Html.ValidationMessageFor(model => model.created_date, "", new { @class = "text-danger" })
</div>
</div>
现在,当created_date有一个值时,我可以打开表单,EditorFor将正确显示该值。但是,即使数据库中保存了一个值,EditorFor的获取日期和处置日期始终显示为mm/dd/yyyy-如果在编辑器仍显示mm/dd/yyyy的情况下保存表单,则数据库中的值将更改为null
当我尝试使用Ex.@Value=Model.disposed\u date.tostringyyyyy-MM-dd为htmlAttribute指定acquired\u date和disposed\u date.ToStringyyyy-MM-dd标志时,Model.acquired\u date.tostringyy-MM-dd和Model.disposed\u date.tostringyyy-MM-dd标志作为“ToString”的无重载方法使用1个参数
有人能看出我做错了什么吗
理想情况下,我希望使用用户在EditorFor中指定的日期和保存时的当前时间保存输入的值。然后,如果用户正在查看记录,我希望在编辑器中以mm/dd/yyyy格式显示该值。这里有一些内容。首先,我假设EditorFor正在生成日期类型的输入。对于HTML5日期输入类型,提供的值必须为ISO格式YYYY-MM-DD。如果不是此格式,则视为未提供值。在post中,这将保存到数据库中,从而产生空值。长和短,您需要将显示格式更改为:
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyInEditMode = true)]
这就是视图模型派上用场的地方,因为您可以在用于编辑对象的类上设置此设置,并在用于查看对象的类上设置您真正需要的显示格式
其次,日期属性是可空的。因此,不能直接使用格式调用ToString。相反,您必须执行以下操作:
@Model.disposed_date.Value.ToString("MM/dd/yyyy")
但是,如果该值为null,则该操作将失败,因此您始终需要确保首先通过将值包装在if块中来获得该值:
@if (Model.disposed_date.HasValue)
{
...
}
或使用三元:
@(Model.disposed_date.HasValue ? Model.disposed_date.Value.ToString("MM/dd/yyyy") : string.Empty)
你有一些事情要做。首先,我假设EditorFor正在生成日期类型的输入。对于HTML5日期输入类型,提供的值必须为ISO格式YYYY-MM-DD。如果不是此格式,则视为未提供值。在post中,这将保存到数据库中,从而产生空值。长和短,您需要将显示格式更改为:
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyInEditMode = true)]
这就是视图模型派上用场的地方,因为您可以在用于编辑对象的类上设置此设置,并在用于查看对象的类上设置您真正需要的显示格式
其次,日期属性是可空的。因此,不能直接使用格式调用ToString。相反,您必须执行以下操作:
@Model.disposed_date.Value.ToString("MM/dd/yyyy")
但是,如果该值为null,则该操作将失败,因此您始终需要确保首先通过将值包装在if块中来获得该值:
@if (Model.disposed_date.HasValue)
{
...
}
或使用三元:
@(Model.disposed_date.HasValue ? Model.disposed_date.Value.ToString("MM/dd/yyyy") : string.Empty)
格式需要是[DisplayFormatDataFormatString={0:yyyy-MM-dd},ApplyFormatInEditMode=true]ISO格式格式需要是[DisplayFormatDataFormatString={0:yyyy-MM-dd},ApplyFormatInEditMode=true]ISO格式谢谢Stephen,成功了!是否有一种简单的方法来保存控件上的当前时间和用户指定的日期?当前,指定的日期始终保存为12:00:00 AM。[DataTypeDataType.date]显示浏览器日期选择器。您可以使用[DataTypeDataType.DateTime]来显示日期时间选择器。您也可以在中使用该技术,但请注意,FireFoxHmm中还不支持type=date。。。当我将DataType.Date更改为DataType.DateTime时,我的空值显示为空编辑器框,我的ex.created_日期显示为2014-10-21。没有显示日期或日期时间选择器?我知道还有一些其他问题与此相关的不一致行为有关。试试我在上一篇评论中链接的解决方案。谢谢Stephen,成功了!是否有一种简单的方法来保存控件上的当前时间和用户指定的日期?当前,指定的日期始终保存为12:00:00 AM。[DataTypeDataType.date]显示浏览器日期选择器。您可以使用[DataTypeDataType.DateTime]来显示日期时间选择器。您也可以在中使用该技术,但请注意,FireFoxHmm中还不支持type=date。。。当我将DataType.Date更改为DataType.DateTime时,我的空值显示为空编辑器框,我的ex.created_日期显示为2014-10-21。没有显示日期或日期时间选择器?我知道还有一些其他问题与此相关的不一致行为有关。尝试我在上一篇评论中链接的解决方案。