我将如何创建全局通知类?

tes*_*ter 8 .net c# asp.net notifications

对于c#还有点新意,我需要在正确的方向上指点一些..

我想在C#/ Asp.net中构建一个通知系统,它允许整个站点的不同方法将消息和消息类型添加到一些静态列表中,这些列表可以在下一页加载时循环.这类似于堆栈溢出如何在每个页面上加载成就的横幅通知(例如"你赢得了x徽章",你获得了y徽章").任何想法我如何暴露一些其他人可能只是消息的全局方法.添加('消息','消息类型')?

编辑:

有人建议我用它Session.Add("Notificiations", myList);来存储消息.

我将如何/在哪里初始化"通知"列表然后在其他地方执行list.add()?

Jag*_*agd 9

在回发页面顶部显示弹出式横幅非常简洁,但更酷的是使用jQuery和ajax定期检查服务器以查看某些内容是否已更改,或者在您的情况下是否有用户任何"新"消息.

当您在Web服务器上运行某个异步进程并且您不知道它需要多长时间(或者您确定它将花费很长时间)并且您不希望这样做时,这确实很有效.你的客户的浏览器正在等待它.使用javascript和window.setInterval你可以设置一个每30秒发生一次的函数(或者你喜欢的任何东西),然后你说这个函数对服务器做一个ajax发布,看看异步过程是否完成.在您的情况下,ajax帖子只是询问服务器用户是否有任何"新"消息.如果用户确实有新消息,那么使用jQuery在页面上显示一些隐藏的div通知用户他们有新消息是一件简单的事情.

这是一个复杂的解决方案,可能超出业余爱好者的技能,但收益是值得的!

  • 使您的Web应用程序看起来更有状态并"了解"服务器上的更改
  • 不必要的页面刷新的分配,往往会破坏用户体验

正如其他人已经指出的那样,存储"全局"信息的最佳位置通常是会话(仅注意会话的有限范围). MSDN ASP.NET会话状态

但是,如果是每个客户端都需要访问的数据,则可以将其存储在应用程序缓存中. ASP.NET缓存

当然,您需要谨慎对待您在会话或缓存中存储的数量.用脚射击自己很容易.


cit*_*nas 6

你可以写一个这样的类(我附近没有任何IDE,所以我希望代码可以编译):

public class MessageHelper
{
    protected const String sessionName = "messages_session";
    public List<String> Messages 
    {
        get 
        {
            List<string> list;
            if (Session[sessionName] != null)
            {
                list = (List<string>)Session[sessionName];
            }
            else 
            {
                list = new List<string>();
            }
            Session[sessionName] = list;
            return list;
        }
        set 
        {
            Session[sessionName] = value;
        }
    }

    public void AddMessage(String message) 
    {
        List<String> list = this.Messages;
        list.Add(message);
        this.Messages = list;
    }

}
Run Code Online (Sandbox Code Playgroud)

要添加消息,您可以执行以下操作:

MessageHelper messageHelper = new MessageHelper();
messageHelper.AddMessage("hello world");
Run Code Online (Sandbox Code Playgroud)

(这些消息存储在会话中,意味着用户特定);

假设您的主页中有文字,您要在其中显示您的消息:

<asp:Literal ID="litMessages" runat="server" />
Run Code Online (Sandbox Code Playgroud)

在您的MasterPage中,您将添加OnInit Eventhandler:

protected override void OnInit(EventArgs e)
{
  MessageHelper messageHelper = new MessageHelper();
  String output = string.Empty;
  foreach(String message in messageHelper.Messages)
  {
    output += String.Format("{0}<br />", message);
  }
  this.litMessages.Text = output;

}
Run Code Online (Sandbox Code Playgroud)

这应该为您提供基本概述,如何存储和显示消息.当然,您可以通过添加删除消息的方法或良好的客户端副作用(如StackOverflow上的通知)来调整此代码.要了解如何完成,您可以使用搜索.这里已经讨论了几个次)

我希望这可以帮助你.