2016-11-14 46 views
0

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

+0

你应该使用静态标志类型全局变量并将其设置为第一次,并在警报显示更改标志值后进行检查 –

回答

0

替代方法是HTML5 SessionStorage API。只有选项卡处于打开状态时,SessionStorage变量才会存在,与LocalStorage相反,LocalStorage一直存在,直到在浏览器上手动清除为止,即没有到期日期。

你可以找到更多的细节here

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

+0

只要浏览器处于打开状态,并且不仅仅是一个选项卡,我就希望变量存在。 – Dash

0

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

<input id="inputAnnounce" type="hidden" [email protected] name="Announcement"/> 

然后在你的Javascript部分,您可以检查该值,如果它是真的还是假的:

$(document).ready(function() { 

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

然后在您的Model实体上,在您的UserSession模型上添加其他属性,这在我的情况下是entUserSession:

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

确保当有人关闭对话框,请致电您的控制器上的功能,使值false,所以它不会再次出现,除非他们注销和登录:

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