Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建邮件和通知系统?_C#_Asp.net_Asp.net Mvc_Web Applications_Notifications - Fatal编程技术网

C# 如何创建邮件和通知系统?

C# 如何创建邮件和通知系统?,c#,asp.net,asp.net-mvc,web-applications,notifications,C#,Asp.net,Asp.net Mvc,Web Applications,Notifications,我们目前正在进行一个ASP.NETMVC4项目,用户可以向政治家提问。当一个问题被提出时,它的状态是待定的。当版主批准时,其状态变为已批准 一个问题可以有几个答案,每个被问到这个问题的政治家可以给出一个答案。用户应该能够订阅一个问题。当这个问题得到新的答案时,他们应该会收到一封电子邮件,如果他们碰巧在网站上在线,一个小小的通知将是一个不错的加分 所以基本上我需要一些方法来记录一个问题中答案集合的数量已经改变了 我有观察者模式的基本知识。我对此做了更多的研究,但我不确定如何将其应用于成熟的Web应

我们目前正在进行一个ASP.NETMVC4项目,用户可以向政治家提问。当一个问题被提出时,它的状态是待定的。当版主批准时,其状态变为已批准

一个问题可以有几个答案,每个被问到这个问题的政治家可以给出一个答案。用户应该能够订阅一个问题。当这个问题得到新的答案时,他们应该会收到一封电子邮件,如果他们碰巧在网站上在线,一个小小的通知将是一个不错的加分

所以基本上我需要一些方法来记录一个问题中答案集合的数量已经改变了

我有观察者模式的基本知识。我对此做了更多的研究,但我不确定如何将其应用于成熟的Web应用程序

我希望你们能就如何以最简单的方式解决这个问题给我一些建议/想法。我不知道应该为这个系统创建哪些具体的类

我们的问题模型如下所示:

public class Question
{
public Question()
{
  AddressedPoliticians = new List<Politician>();
  Topics = new List<Topic>();

  Attachments = new List<Attachment>();
  Answers = new List<Answer>();
  QuestionSubscriptions = new List<QuestionSubscription>();
  SupportingUsers = new List<Regular>();
}

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int QuestionId { get; set; }

[StringLength(250, ErrorMessageResourceType = typeof (Resources.Resources),
  ErrorMessageResourceName = "MaxCharsQuestionAchieved")]
[Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "Question_GeneralQuestionRequired")]
public string GeneralQuestion { get; set; }

[StringLength(1000, ErrorMessageResourceType = typeof (Resources.Resources),
  ErrorMessageResourceName = "MaxCharsExplanationAchieved")]
[Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "Question_ExplanationRequired")]
public string Explanation { get; set; }

//Whether the user is still writing the question
public bool IsTemplate { get; set; }

//Pending, Approved, Rejected
public QuestionState QuestionState { get; set; }
public DateTime DateSubmitted { get; set; }
public DateTime? JudgementDate { get; set; }

public virtual Regular Author { get; set; }

public virtual List<Politician> AddressedPoliticians { get; set; }

public virtual List<Topic> Topics { get; set; }

public virtual Moderator LastEditor { get; set; }

public virtual City City { get; set; }

public virtual List<Attachment> Attachments { get; set; }
public virtual List<Answer> Answers { get; set; }

public virtual List<QuestionSubscription> QuestionSubscriptions { get; set; }

public int FbShares { get; set; }
public int FbLikes { get; set; }
public int TwitterShares { get; set; }

public virtual List<Regular> SupportingUsers { get; set; }

[NotMapped]
public int SiteVotes
{
  get { return SupportingUsers.Count; }
}
}
最后,超类订阅:

public abstract class Subscription
{
  [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
  public int SubscriptionId { get; private set; }

  public DateTime LastUpdate { get; protected set; }
  public DateTime LastMailSent { get; protected set; }

  [Description("Do you want to receive emails?")]
  public bool WantsToReceiveEmail { get; set; }
  public NotificationFrequency NotificationFrequency { get; set; }

  public virtual Regular Subscriber { get; set; }
}

这是一个非常广泛的问题,但我可能会创建一个
Alert
类。当情况发生变化时,创建一个新警报,并用一个标志表示未看到该警报。一旦用户单击它,将其设置为“平坦”,以显示其外观。至于启动这些,可以考虑实现一个经常运行的windows服务来发送电子邮件等。是的,对此我很抱歉,只是不知道需要做多少工作以及如何最好地完成;)至于警报,这听起来是个好主意。我仍然有点困惑,当答案计数改变时,如何以及通知什么:s
public abstract class Subscription
{
  [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
  public int SubscriptionId { get; private set; }

  public DateTime LastUpdate { get; protected set; }
  public DateTime LastMailSent { get; protected set; }

  [Description("Do you want to receive emails?")]
  public bool WantsToReceiveEmail { get; set; }
  public NotificationFrequency NotificationFrequency { get; set; }

  public virtual Regular Subscriber { get; set; }
}