如何在不增加命中计数器的情况下刷新页面

本文关键字:情况下 刷新 计数器 增加 | 更新日期: 2023-09-27 18:24:05

我需要在点击按钮时刷新页面,但我不想增加点击计数器。基本上,该页面有几个网格,所以我只想在单击刷新按钮时刷新这些网格数据,但不想增加刷新时的命中率。

如何在不增加命中计数器的情况下刷新页面

使用AJAX只刷新那些网格数据

您可以使用以下任意一种方法获取:

  • 使用AJAX从客户端到服务器的异步调用
  • 使用signalR或Websockets之类的东西。SignalR将在可用的情况下利用websocket,然后依靠许多其他技术来实现同样的目的

您可以使用UpdatePanel。

ASP.NET UpdatePanel控件使您能够构建丰富的、以客户端为中心的Web应用程序。通过使用UpdatePanel控件,您可以刷新页面的选定部分,而不是使用回发刷新整个页面。这被称为执行部分页面更新。包含ScriptManager控件和一个或多个UpdatePanel控件的ASP.NET网页可以自动参与部分页面更新,而无需自定义客户端脚本。

http://msdn.microsoft.com/en-us/library/bb399001(v=vs.100).aspx

首先创建一个长期存储页面:counter.xml,如下所示。

<?xml version="1.0" standalone="yes"?>
    <counter>
      <count>
        <hits>0</hits>
      </count>
    </counter>

然后打开Global.asax.cs并添加以下内容。

using System;
using System.Data;
using System.Web;
using System.Web.Optimization;
using System.Web.Routing;
namespace YOURNAMESPACE
{
public class Global : HttpApplication
    {
        //1. Create a lock and a DataSet object.
        private static readonly Object lockObj = new object();
        private static DataSet dataSet = new DataSet();
        void Application_Start(object sender, EventArgs e)
        {
            // Code that runs on application startup
            //2. Read counter.xml into the dataSet any time the  
            //application is started. Here counter.xml is in the Application root.
            dataSet.ReadXml(Server.MapPath("~/counter.xml"));
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

将Session_Start处理程序添加到类中。Session_Start仅在创建新会话时运行,而不在刷新页面时运行。

        void Session_Start(object sender, EventArgs e)
        {
            //3. Lock the dataSet to prevent synchronization issues.  
            lock (lockObj)
            {
                //4. Increment hits in the dataSet.
                dataSet.Tables[0].Rows[0]["hits"] = 1 + int.Parse(dataSet.Tables[0].Rows[0]["hits"].ToString());
                //5. Write the new value to the long-term storage, counter.xml
                dataSet.WriteXml(Server.MapPath("~/counter.xml"));
            }
        }
    }
}