【问题标题】:Asp.net mvc 5 adding a time stamp to when things were added?Asp.net mvc 5 在添加内容时添加时间戳?
【发布时间】:2017-12-06 05:23:49
【问题描述】:

假设我的网站上有一个存储在数据库中的评论部分。当我添加新评论时,我想看看是谁添加了它,以及他/她在什么日期/时间发布了它。

不确定我将如何继续这样做。谁能把我推向正确的方向?

我知道我可以做到这一点。 public DateTime Time { get; set; } 无论如何最终会导致用户输入自己的日期,我需要自动。

这是我尝试的模型,它没有编译,而是生成Error 3 The type name 'Now' does not exist in the type 'System.DateTime'

public class Suggestion {
    public int Id { get; set; } 
    public string Comment { get; set; } 
    public DateTime.Now Time { get; set; } 
}

这是我得到的错误Error 3 The type name 'Now' does not exist in the type 'System.DateTime'

【问题讨论】:

  • 向模型添加属性并使用DateTime.Now()?
  • 这个问题太宽泛,无法回答,并且您没有发布任何代码作为参考,如果您遵循 MVC CRUD 操作的基础知识,您可能会得到您想要的答案:asp.net/mvc/overview/getting-started/…
  • 您的“评论模型”中有日期时间属性吗?如果是这样,只需在属性值中添加当前系统日期时间(DateTime.Now),否则您必须扩展您的 Comment 模型来存储日期时间数据。
  • 这个问题可能会以现在的方式吸引反对票和/或接近投票。你问的实际问题是什么? “谁能把我推向正确的方向?”是或否的答案,并且尖叫您根本没有尝试任何东西,甚至没有查看任何东西。虽然该网站的用户希望帮助其他人解决编程问题,但他们通常不想编写完整的解决方案......
  • 正确,但这样做会使发帖的用户输入日期?应该是自动的。

标签: c# asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

如果你想让它每次都自动运行,你应该在构造函数中设置WhenCreated。这样您就不必记住在任何地方进行设置。

public class Suggestion 
{
  public DateTime WhenCreated { get; set; }
  /* other props */

  public Suggestion() 
  {
    WhenCreated = DateTime.Now;
  }
}

当从数据库记录中重新合成Suggestion 时,WhenCreated 将由 EntityFramework 或您正在使用的任何持久层更新。这发生在 Constructor 被调用之后,所以无论你在那里有什么初始值都无关紧要。当您的应用程序创建新的Suggestion 时,WhenCreated 字段将自动设置为现在。

注意:DateTime.Now 返回服务器时区的当前日期和时间。您可能需要为您的用户处理本地时区的转换,如果是这种情况,最好使用 DateTime.UtcNow 来获取 UTC 时间,这样将来更容易本地化(不会加倍/丢失在夏令时移动中一个小时)

【讨论】:

    【解决方案2】:
    public class Suggestion {
      public int Id { get; set; } 
      public string Comment { get; set; } 
      public DateTime Time { get; set; } 
    }
    
    Suggestion s = new Suggestion();
    s.Time = DateTime.Now;
    

    【讨论】:

      【解决方案3】:

      两种可能的选择:

      1. 当您定义表以在数据库中存储 cmets 时,添加新列以存储创建行时的日期时间。给它默认值。例如,在 Sql Server 中,您可以使用 getdate() 作为默认值。这种方法的优点是您不需要编写额外的 C# 代码来为 WhenCreated 列设置值:

      .

      CREATE TABLE [dbo].[Coments](
         [Id] [int] NULL,
         [Comment] [nvarchar](50) NULL,
         [WhenCreated] [datetime2](7) NOT NULL DEFAULT getdate()
      )
      
      1. 如果您想在 C# 中执行此操作,您可以使用 DateTime.Now

       public class Suggestion {
              public int Id { get; set; } 
              public string Comment { get; set; } 
              public DateTime WhenCreated { get; set; } 
          }
      
          var n = new Suggestion();
          n.WhenCreated = DateTime.Now;
      

      【讨论】:

      • 但是为了创建 Suggestion 类的新实例,我必须在另一个类中,这不会在我的数据库中创建两个表吗?
      • 你说的“去另一个班级”是什么意思?
      • @Carlssonthepirate 这是一个简单的例子,如果您已经有一个包含用户填写的其他数据的类的实例,只需更新该实例的属性......
      • 它不会在 db 中创建两个表。
      【解决方案4】:

      我这样解决了这个问题

       public class Time
      {
          private DateTime _date = DateTime.Now;
      
          public int ID { get; set; }
      
          public DateTime DateCreated
          {
              get { return _date; }
              set { _date = value; }
          }
      
      }
      

      【讨论】:

        【解决方案5】:

        你对自己想做的事情有正确的想法,只是不知道如何去做。

        如果您想在创建对象时设置一个值,那么执行此操作的最佳位置是在对象默认构造函数中。

        每次通过调用 new 关键字创建对象时,程序都会调用默认构造函数。

        所以,回到你的问题,要完成你想做的事情,你只需要做这样的事情:

        public class YourClass() 
        {
            public DateTime CreatedAt { get; set; }
        
            public YourClass()
            {
                CreatedAt = DateTime.Now;    
            }
        }
        

        旅途愉快!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-22
          • 1970-01-01
          • 2013-06-06
          • 2011-04-26
          • 2019-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多