Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在EditorFor中显示[Date]值:“ToString”没有重载方法需要1个参数吗?_Asp.net Mvc_Datetime_Razor_Editorformodel - Fatal编程技术网

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。没有显示日期或日期时间选择器?我知道还有一些其他问题与此相关的不一致行为有关。尝试我在上一篇评论中链接的解决方案。