我会在哪里放一些只能运行一次的东西?

时间:2016-10-25 13:13:39

标签: c# asp.net code-behind

我有一个包含母版页的C#网站。因此,当用户首次打开网站时,我想运行一个脚本来告诉我用户所在的位置。然后我会将该信息写入隐藏字段,只要我需要引用该信息,我就会将其从这个隐藏字段中拉出来。

那么,我将把这个引用放在代码隐藏中,以便它只运行一次?我尝试将其放在if (!IsPostBack)内的protected void master_Page_PreLoad(object sender, EventArgs e)内,但这不起作用。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

嗯,HiddenField不能满足您的要求。

我建议您先选择首选的持久性机制。这是一个很棒的MSDN页面,列出了ASP.NET中可用的所有持久性机制:

ASP.NET State Management Overview

这是所涵盖机制的清单:

  • 查看状态
  • 控制状态
  • 隐藏的字段
  • 列表项
  • <强>缓存
  • 查询字符串
  • 申请状态
  • 会话状态
  • 个人资料属性

其中,基于我对您的问题的了解,我建议您查看Cookie,会话状态或配置文件属性。这3种机制可跟踪每个用户的数据,并可在整个Web应用程序中保留。

阅读如何实施您选择的机制,尝试一些代码,如果您还有其他问题,请发布一个新问题。

答案 1 :(得分:0)

您可以在Global.asax页面

中的Session_Start方法中指定值
void Session_Start(object sender, EventArgs e)
{
   setValue();
}

protected void setValue(){
  session["DefaultValue"]="test";
}

只有在为登录用户创建会话时,Session_Start方法才会执行一次,然后整个应用程序都可以访问存储在会话中的值。

答案 2 :(得分:0)

如果您从数据库访问数据,那么您可以在登录后检索数据并将其存储在会话中。

如果你使用谷歌地图访问数据,那么在主页面!Ispostback检查会话中的数据,如果没有找到,则从客户端页面运行脚本存储hiddenfield中的值。并且在回发后存储会话中隐藏字段的值,如果会话数据为空。