【问题标题】:What is the best way to set time boundries for user to input data? (asp.net mvc)为用户输入数据设置时间界限的最佳方法是什么? (asp.net mvc)
【发布时间】:2016-09-14 09:51:22
【问题描述】:

我实际上是在思考时间问题。我希望允许用户在每周一至周三(周一 00:00 至周三 23:59)之间输入数据一次,并创建一个代表每周的唯一 ID。

我稍后需要这个 id,所以用户在下周打开之前不能插入另一条相同的数据。

起初,我选择了 DateTime.Today,但后来意识到它不会阻止用户在下一天(或另一天)插入另一条数据。

现在我正在考虑创建一个操作过滤器,如果用户已经登录了本周的数据并在下周一接收它,则该过滤器将阻止用户。我需要一个在星期一 00:00 重置标志并在星期四 00:00 升旗(如果用户尚未登录数据)的功能,这似乎需要大量时间控制工作(这就是我选择的原因唯一 id 1st)并设置打开/关闭操作过滤器(我不知道这是否真的可能或如何做到)。

我认为这是一条糟糕的道路,意味着可能有另一种方式来实现我的目标。或者甚至可能已经有了某种解决方案。这就是我在这里问你的原因,希望能得到启发。

谢谢!

编辑:

以上所有都将 raport_id 作为唯一 ID。

数据库类:

-报告

public class Raport
    {
[DatabaseGenerated(DatabaseGeneratedOption.None)]
        [Key]
        public string raport_id { get; set; } //id raportu
        public string userID { get; set; }

        public DateTime creation_time { get; set; }

        public int isMinus { get; set; }

        public DateTime last_modyfication { get; set; }


        public virtual ICollection<ThrashType> ThrashType { get; set; } 


        public virtual UserFrontInfo UserFrontInfo { get; set; }       
    }

--thrash 类型

public class ThrashType
{

    [Key] 
    public int IdTrash { get; set; }
    public string raport_id { get; set; } 
    public string ClassName { get; set; } 

    public bool isNegative { get; set; }
    public int Quantity { get; set; } 

    public string Information { get; set; } 

    public virtual Raport Raport { get; set; }   

}

创建 raport_id:

            var datePart = DateTime.Today.ToString().Replace(".", "").Replace(":","").Replace(" ","");
            var namePart = User.Identity.Name.ToString();

            var nameShort = namePart.Remove((namePart.Length)-13, 12); 

            newRaport.raport_id = datePart + nameShort;

【问题讨论】:

  • 如果您使用DateTime.Today,那么很容易使用该值来获取一周中的相关日期

标签: c# asp.net asp.net-mvc date action-filter


【解决方案1】:

一些代表数据库的具体类确实有助于说明您的问题。

如何实现最终解决方案,无论是操作过滤器、操作方法中的检查还是其他任何地方都无关紧要。

当用户可以每周输入一次数据时,只需将周数与数据一起存储,当他们尝试输入更多数据时,检查给定周数的数据是否已经存在。

请参阅Get the correct week number of a given date,了解获取给定日期的周数的实现。

【讨论】:

    【解决方案2】:

    看来您是在为自己扭曲问题。从您的文字中,我明白这一点:

    您希望防止用户每周向您的表中添加行超过一次。

    您可以通过以下方式check the week

    cal.GetWeekOfYear(date1, dfi.CalendarWeekRule,dfi.FirstDayOfWeek)
    

    也很容易检查您的新行以查看该周是否还有另一行。

    即:如果你使用 sqlserver (t-sql),你就会有这样的东西

    SELECT DATEPART(wk, GETDATE())
    

    这很重要:

    不要为这样的事情设置标志。只需检查您的表格,看看该人在该周是否存在一行,您就可以开始了。

    如果您关心的是性能,通过添加一个标志,您将执行相同的过程来调用数据库,相信我这不是您需要实现工作的场景......

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2012-04-08
      • 2013-02-03
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      相关资源
      最近更新 更多