需要一个持久数据解决方案来解决我的热门计数器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>

需要一个持久数据解决方案来解决我的热门计数器asp.net困境

如果您想确保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