2016-09-14 3 views
0

Я фактически обворачиваю голову вокруг проблемы времени. Я хочу разрешить пользователю вводить данные с понедельника по среду (понедельник 00:00 до среды 23:59) каждую неделю только один раз и создавать уникальный идентификатор, который будет отображаться каждую неделю.Каков наилучший способ установки временных ограничений для ввода пользователем данных? (asp.net mvc)

Мне нужен этот идентификатор позже, поэтому пользователь не может вставить еще одну часть тех же данных до открытия следующей недели.

Сначала я пошел на DateTime.Today, но потом понял, что он не мешает пользователю вставлять другую часть данных в следующий (или другой) день.

Теперь я думаю о создании фильтра действий, который блокирует пользователя, если он уже подписал данные за неделю и берет его в следующий понедельник. Мне нужна функция, которая сбрасывает флаг в понедельник 00:00 и поднимает флаг в четверг 00:00 (если пользователь не подписал данные), который, как кажется, много времени контролирует работу (вот почему я пошел уникальный идентификатор 1-го) и установка включения/выключения фильтра действий (который я не знаю, действительно ли это возможно или как это сделать).

Я думаю, что это плохая дорога, чтобы следовать за смыслом, может быть другой способ достичь моей цели. Или даже может быть какое-то решение. Вот почему я прошу вас здесь, надеясь на вдохновение.

Спасибо!

EDIT:

Все изложенные выше соображения raport_id в качестве уникального идентификатора.

дБ Классы:

-raport

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; 
+0

Если вы используете ' DateTime.Today', то его достаточно легко использовать это значение, чтобы получить связанные дни недели. –

ответ

1

Кажется, что вы сами закручиваете проблему. Из вашего текста я понимаю это:

Вы хотите, чтобы пользователь не добавлял строку в таблицу более одного раза в неделю.

check the week Вы можете по:

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

Это также легко проверить новую строку, чтобы увидеть, если есть другая строка в этой неделе.

т.е: если вы используете SQLServer (T-SQL) у вас есть что-то вроде этого

SELECT DATEPART(wk, GETDATE()) 

Это очень важно:

Не установить флаг на что-то вроде этого. Просто проверьте свою таблицу и посмотрите, существует ли строка для этого человека на этой неделе, и вам хорошо идти.

Если ваша проблема является производительность, добавив флаг вы будете делать тот же самый процесс для вызова базы данных, поверьте мне, это не сценарий, который необходимо реализовать работу и ...

2

Некоторые конкретные классы, которые представляют собой базу данных будет действительно помогите проиллюстрировать ваш вопрос.

Как вы реализуете окончательное решение, будь то фильтр действий, проверка в методе действий или где-либо еще, на самом деле не имеет значения.

Когда пользователи могут вводить данные один раз в неделю, просто сохраните номер недели с данными, и когда они попытаются ввести больше данных, проверьте, существуют ли данные для данного номера недели.

См. Get the correct week number of a given date для реализации получения номеров недель для заданных дат.

+0

Я рассмотрю его полностью, thx! –

 Смежные вопросы

  • Нет связанных вопросов^_^