如何在不增加命中计数器的情况下刷新页面
本文关键字:情况下 刷新 计数器 增加 | 更新日期: 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"));
}
}
}
}