需要一个持久数据解决方案来解决我的热门计数器asp.net困境
本文关键字:我的 解决 热门 计数器 困境 net asp 解决方案 数据 一个 | 更新日期: 2023-09-27 18:09:13
我正试图在我的网站上实现一个点击计数器。我正试图找到一种方法,将持久数据命中计数从一个网络表单发送到另一个网络窗体。通常,我会使用会话状态或cookie之类的东西。我的问题是,当我第一次显示网页时,计数器不会出现,只有当我在主页和我正在计数的页面之间来回导航时才会出现。我猜这是因为每次我离开网站并重新查看时,会话状态都会结束,并创建一个新的会话,因此数据会消失。所以不可能在舞台上表演。
我认为创建一个cookie可能是一个解决方案,但我意识到,任何第一次访问我的页面的人,在第一次访问时仍然会遇到没有显示命中率的问题。我的问题是,在新用户第一次访问我的网页时,是否可以简单地显示持久数据。
带有计数器的页面
protected void Page_Load(object sender, EventArgs e)
{
string field1 = (string)(Session["field1"]);
Label1.Text = field1;
}
我试图从中获取计数器值的页面
using (conn)
{
//open the connection
conn.Open();
//send the query and store the results in a sqldatareader
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
//set the text of our label to the current # of hits
lblHits.Text = "Default Page Hits - " +
rdr["Hits"].ToString();
}
Session["field1"] = rdr["Hits"].ToString();
}
我的asp.net控制
<asp:Label ID="Label1" class="viewNumber" runat="server"
EnableViewState="False" ></asp:Label>
如果您想确保Session
集合从用户访问页面的那一刻起就保持一个值,您可以利用连接在项目的global.asax中的Session_Start
方法,该方法可以访问HttpApplication
实例。
当用户还没有会话并且正在创建新会话时,Session_Start
运行一次。您可以访问Session
,因为该属性公开了HttpApplication
上的HttpSessionState实例
你提供的代码示例并不完整,但我希望如果你有这样的东西,你应该很接近。
public class Global : HttpApplication
{
void Session_Start(object sender, EventArgs e)
{
using (var conn = new SqlConnection())
{
using (var cmd = new SqlCommand("select Hits from application", conn))
{
//open the connection
conn.Open();
//send the query and store the results in a sqldatareader
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
Session["field1"] = rdr["Hits"];
}
else
{
// no record found, so start at 0
// maybe init the row in the table as well...
Session["field1"] = 0;
}
}
}
}
请注意,这将是真正的应用程序全局状态,因此您可以使用Application
来代替填充Session。在这种情况下,设置键值的代码可以移动到Application_Start
。