【问题标题】:Show Alert message in MVC website on home page when opened for the first time in a browser首次在浏览器中打开时,在主页上的 MVC 网站中显示警报消息
【发布时间】:2016-11-14 13:47:28
【问题描述】:

我想在网站主页上显示一条警告消息,仅当在浏览器中首次访问该网站时。如果打开新选项卡并再次访问站点,则不应显示警报消息。但是,如果我关闭浏览器并再次打开它,然后我访问此站点,则应显示警报消息。我应该如何在 MVC 项目中实现这一点? 如果我将使用“会话”,我想警报消息将显示在我访问该网站的每个选项卡中。如果我使用“LocalStorage”,即使我关闭浏览器并再次打开它也不会显示警报消息。请建议我实现此目的或任何替代方法的最佳方法。

【问题讨论】:

  • 你应该使用静态标志类型的全局变量并第一次设置它并检查并在警报显示更改标志值之后

标签: angularjs asp.net-mvc asp.net-mvc-4 session local-storage


【解决方案1】:

替代方案是 HTML5 SessionStorage API。 SessionStorage 变量仅在选项卡打开时才存在,与 LocalStorage 不同,LocalStorage 会一直存在,直到在浏览器上手动清除,即它没有到期日期。

您可以找到更多详情here

sessionStorage 属性允许您访问当前源的会话存储对象。 sessionStorage 与 Window.localStorage 类似,唯一的区别是 localStorage 中存储的数据没有设置过期时间,而 sessionStorage 中存储的数据在页面会话结束时会被清除。只要浏览器打开并在页面重新加载和恢复后仍然存在,页面会话就会持续。在新选项卡或窗口中打开页面将导致启动新会话,这与会话 cookie 的工作方式不同。

【讨论】:

  • 我希望变量在浏览器打开的情况下存在,而不仅仅是一个标签。
【解决方案2】:

你可以试试这个,在你的 _Layout.cshtml 上创建一个隐藏字段:

 <input id="inputAnnounce" type="hidden" value=@Model.entUserSession.blIsAnnounce name="Announcement"/>

然后在您的 Javascript 部分,您可以检查该值是否为真:

$(document).ready(function() {

      if (inputAnnounce == "True") {
           //Do your alert logic here 
        }
    });

然后在您的模型实体上,在您的 UserSession 模型上添加其他属性,在我的例子中是 entUserSession:

public static bool blIsAnnounce
    {
        get
        {
           return _blIsAnnounce;
        }
        set { _blIsAnnounce = value; }
    }

确保当有人关闭您的对话框时,调用您控制器上的一个函数以将值设为 false,以便除非他们注销并登录,否则它不会再次出现:

public ActionResult fncCloseAnnouncement()
    {
        Model.entUserSession.blIsAnnounce = false;
        return null;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多