2016-08-13 60 views
0

我在SQL Server中有一个名为的日期date_updated。在MVC应用程序,在/Controllers/Example.cs,我有以下几点:MVC控制器类中的DateTime DisplayFor,EditorFor和HiddenFor HTML帮助程序

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) 

比方说,今天的日期是2016年8月13日,并在SQL与ID =“1”的记录已LAST_UPDATED =“2016年7月1日”。 DisplayFor和EditorFor HTML助手将显示今天的日期(08/13/2016),HiddenFor HTML助手将在SQL中显示日期(07/01/2016)。

  • DisplayFor = 2016年8月13日
  • EditorFor = 2016年8月13日
  • HiddenFor = 2016年7月1日

我非常喜欢DisplayFor,EditorFor和HiddenFor HTML助手全部在SQL中显示日期(07/01/2016)。我不知道如何让DisplayFor和EditorFor HTML帮助程序从SQL中显示date_updated

+0

在这种情况下,你为什么有这样的属性setter'_date = DateTime.Now;'? – Rahul

+0

我已经放置_date = DateTime.Now;在setter属性内部,以便在导航到www.example.com/Example/Edit/1并单击Save时,SQL中的DateTime更新为当前日期时间。有没有更适合这个目标的其他方法? – JeremyCanfield

+0

你声称是不可能的(除非你省略了一些相关的代码)。由于您无法设置其值,所以'date_updated'的值只能返回'DateTime.Now'(或'DateTime.MinValue')。并且'EditorFor()'和'HiddenFor()'在它们将显示的内容之间没有区别(除非您为'DateTime'类型定制了'EditorTemplate')并且除非您更改了控制器中属性的值在'ModelState'值初始化后,将与'DisplayFor()' –

回答

0

这是我提出的解决方案,以防万一它帮助别人。有2列SQL:

  • date_published
  • 日期date_updated

当编辑的记录,目的是保持当前日期时间在SQL的date_published,并更新日期时间在SQL的date_updated为当前日期时间。

我修改了/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; } 

然后,我将HiddenFor HTML helpers添加到date_published和date_updated列的/ View/Example/Edit文件中。我将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" />