65.9K
CodeProject 正在变化。 阅读更多。
Home

易于使用的点击计数器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.54/5 (37投票s)

2004 年 1 月 21 日

3分钟阅读

viewsIcon

320399

downloadIcon

12567

一个*非常容易*使用的 ASP.NET 点击计数器控件。

Sample Image - EasyHit.jpg

引言

我想为我的 ASP.NET 应用程序创建一个点击计数器,但我希望它非常容易部署。 我不想上传一组图像,设置数据库访问或任何类似的东西。 我想要一些可以添加到 Visual Studio 工具箱中,然后简单地拖放到我的页面上的东西。

解决方案

我设计了一个自定义控件,它呈现一个 HTML 表格,每个单元格都是计数器的一个数字。 计数器的样式可以完全在 Visual Studio 设计器中配置。 上图显示了计数器运行的示例。

点击次数存储在一个文本文件中,该文件将在页面首次被点击时自动创建。 您可以选择每次页面被点击时递增该文件中存储的值,或者您可以选择延迟,在这种情况下,该文件只会按照您指定的时间间隔更新。

由于该值存储在文本文件中,如果您更新应用程序,页面计数不会丢失。 如果没有文本文件,并且我们仅将计数器存储为应用程序变量,那么当您更新站点时,您将把计数器重置为零。

以下是控件最重要的属性

  • Visible

    确定是否在页面上显示计数器。 如果值为 True(默认值),则用户可以在页面上看到计数器。 如果该值设置为 False,则计数器会递增,但不会在页面上显示。

  • 填充

    要显示的最小位数,默认为 5,因此 3 个点击显示为 00003。

  • WriteDelay

    更新文本文件的时间间隔。 在 Visual Studio 设计器中,此格式为 hh:mm:ss。 如果您指定一个零值(默认值,即 00:00:00),则每次访问页面时都会更新文本文件。

  • TextFileName

    点击计数存储在服务器上的文件,相对于应用程序根目录。 如果你想把这个文件放在一个子文件夹中,你可以这样做(例如,bin\count.txt 会把文件存储在应用程序的 bin 文件夹中,而不是根目录)。

所有其他属性都只是用于应用颜色和格式,它们都应该以正常方式工作。

详细信息

呈现控件非常简单。 首先,我重写了 WebControlTagKey 属性,告诉它发送一个 table 标签,而不是默认的 span 标签。

接下来,我添加 table 属性,例如边框和间距,然后将开始标签发送到浏览器。 一个 foreach 循环将每个包含数字的列添加到表格中。 最后,发送结束标签,我们就完成了。

protected override void Render(HtmlTextWriter output)
{    
    Attributes.Add("cellSpacing","1");
    Attributes.Add("cellPadding","1");
    Attributes.Add("border","1");
    Attributes.Add("borderWidth",BorderWidth.ToString());
    Attributes.Add("borderColor",formatColour(BorderColor));

    base.RenderBeginTag(output);
        
    output.Write("<TR>");
    foreach (char c in mCount.ToString().PadLeft(mPadding,'0'))
        output.Write("<TD align=\"middle\">"+c+"</TD>");
    output.Write("</TR>");

    base.RenderEndTag(output);        
}

计数器在重写的 OnLoad 方法中递增。 此代码首先检查 Context 是否为 null。 这告诉我们该控件是否在 Visual Studio IDE 中显示。 我也在检查页面是否是回发。 在任何一种情况下,计数器都不会递增。 否则,点击计数器将增加一。

如果您想使用此控件,请下载源代码并将对 DSHHitCounter.dll 的引用添加到您的 ASP.NET 应用程序中。 如果您将 HitCounter 控件添加到您的工具箱中,您可以简单地将控件拖放到设计器中的 ASPX 页面上并立即运行它。 没有比这更容易的了。

注释

此控件要求应用程序具有 FileIOPermissionAccess.WriteFileIOPermissionAccess.AppendFileIOPermissionAccess.Read 权限才能访问托管它的文件夹。

© . All rights reserved.