【问题标题】:DateTime in MVC Controller Class for DisplayFor, EditorFor, and HiddenFor HTML helpers用于 DisplayFor、EditorFor 和 HiddenFor HTML 帮助器的 MVC 控制器类中的 DateTime
【发布时间】:2016-12-20 06:03:39
【问题描述】:

我在 SQL Server 中有一个名为 date_updated 的列。在 MVC 应用程序中,在 /Controllers/Example.cs,我有以下内容:

    private DateTime _date;
    public DateTime date_updated
    {
        get
        {
            return _date;
        }
        set
        {
            _date = DateTime.Now;
        }
    }

在 /Views/Example/Edit.cshtml,我有一个 DisplayFor、EditorFor 和 HiddenFor HTML 帮助器。

@Html.DisplayFor(model => model.date_updated)
@Html.EditorFor(model => model.date_updated)
@Html.HiddenFor(model => model.date_updated)

假设今天的日期是 08/13/2016,SQL 中 ID="1" 的记录的 last_updated="07/01/2016"。 DisplayFor 和 EditorFor HTML 帮助器将显示今天的日期 (08/13/2016),而 HiddenFor HTML 帮助器将在 SQL 中显示日期 (07/01/2016)。

  • DisplayFor = 08/13/2016
  • EditorFor = 08/13/2016
  • HiddenFor = 07/01/2016

我非常希望 DisplayFor、EditorFor 和 HiddenFor HTML 帮助程序都在 SQL 中显示日期(07/01/2016)。我不确定如何让 DisplayFor 和 EditorFor HTML 帮助程序从 SQL 中显示 date_updated

【问题讨论】:

  • 在这种情况下,为什么你在属性设置器_date = DateTime.Now;中有这个?
  • 我已经放置了_date = DateTime.Now;在 setter 属性内部,这样当导航到 www.example.com/Example/Edit/1 并单击 Save 时,SQL 中的 DateTime 会更新为当前 DateTime。还有其他更适合这个目标的方法吗?
  • 您声称的内容是不可能的(除非您省略了一些相关代码)。 date_updated 的值只能返回DateTime.Now(或DateTime.MinValue),因为您无法设置它的值。 EditorFor()HiddenFor() 在它们将显示的内容上没有区别(除非您有自定义的 EditorTemplate 用于 typeof DateTime)并且除非您在 ModelState 之后更改了控制器中的属性值值已初始化,将与DisplayFor() 相同
  • 谢谢各位,你们的 cmets 帮助我找到了解决方案。如果对其他人有帮助,我会回答我的问题。

标签: c# sql-server asp.net-mvc datetime


【解决方案1】:

这是我想出的一个解决方案,以防它帮助其他人。 SQL中有2列:

  • 发布日期
  • date_updated

在编辑记录时,目标是为 date_published 保留 SQL 中的当前 DateTime,并将 date_updated 的 SQL 中的 DateTime 更新为当前 DateTime。

我将 /Controllers/Example.cs 文件修改为具有以下内容。

[Required]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime date_published { get; set; }

[Required]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime date_updated { get; set; }

然后,我在 /View/Example/Edit 文件中为 date_published 和 date_updated 列添加了 HiddenFor HTML 帮助程序。我将 date_updated 的值设置为 System.DateTime.Now。

@Html.HiddenFor(model => model.date_published)
@Html.HiddenFor(model => model.date_updated, new { @Value=System.DateTime.Now })

查看 www.example.com/App/Edit/1 的源代码将包含 date_published 和 date_updated 列的隐藏 HTML 标记。 date_published 隐藏标记包含来自 SQL 的 DateTime 的值。 date_updated 标记包含 2 个值,一个用于 SQL 中的 DateTime,另一个用于 System.DateTime.Now。虽然在 date_updated 标签中有 2 个值并不理想,但它达到了目标。 date_published 会保留 SQL 中的 DateTime,date_updated 会将 SQL 中的记录更新为当前的 DateTime。

<input id="date_published" name="date_published" type="hidden" value="7/01/2016 1:23:27 PM" />
<input Value="08/13/2016 13:50:42" id="date_updated" name="date_updated" type="hidden" value="7/01/2016 1:23:27 AM" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2018-02-14
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多