使用AJAX Control Toolkit的评分控件创建图形化评分系统

ASP.NET网站中,有时需要以图形化的方式展示评分,比如使用温度计或仪表盘的形式。本文将介绍如何使用AJAX Control Toolkit中的评分控件来实现这一需求,并设置CSS和图片以显示为仪表盘或温度计。

在开发一个AJAXASP.NET网站时,面临了创建一个温度计的需求。需要配置参数范围并使用不同的图形来展示。

设置

要使用评分控件并创建仪表盘/温度计,需要满足以下条件:

  • Windows操作系统(XP或更新版本)
  • Visual Studio(2005或更新版本)
  • ASP.NETAJAX支持的网站(Microsoft ASP.NET AJAX v1.0)
  • AJAX Control Toolkit(v1.0.10123.0)
  • 中级CSS知识
  • 绘制简单图形的能力

使用代码

首先,需要在ASPX页面中添加评分控件。页面应该看起来像这样:

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <div> <cc1:Rating ID="Rating1" runat="server"></cc1:Rating> </div> </form> </body> </html>

接下来,需要设置评分控件的基本属性。可以从控件网站上描述的属性开始:

<ajaxToolkit:Rating runat="server" ID="Rating1" MaxRating="5" CurrentRating="2" CssClass="ratingStar" StarCssClass="ratingItem" WaitingStarCssClass="Saved" FilledStarCssClass="Filled" EmptyStarCssClass="Empty"> </ajaxToolkit:Rating>

控件提供了五个星星的选择,因此可以选择1到5的评分。有三个基本图片用于显示控件的状态,通过CSS类名识别:

  • Empty - 当值未被选择时。
  • Filled - 当值被选择时。
  • Saved - 当值通过异步回传保存时。

还有两种更多的样式:

  • ratingStar - 指定控件,此评分为“星星”类型。
  • ratingItem - 指定评分的每个“星星”。

控件的渲染如下:

但是,如果想要使用其他的图形呢?如果想要有一个1到10的比率呢?如果想要能够选择甚至零或“未选择”的值呢?

简单地说,评分控件允许这样做。只需要编写一些CSS并绘制一些图形。

主要思想是:

  • 在背景上有一些漂亮的图形。
  • 使用透明盒子为“Filled”星星。这些盒子将显示背景图形。
  • 使用填充的盒子为“Empty”星星。这些盒子将覆盖背景。
  • 使用CSS中的padding定位评分控件,以便“星星”放置在背景的所需区域。
  • 更改MaxRating值。如果需要“零”值,就给值加一。
  • 对于CSS属性 - 只改变CssClass属性的值,其他CSS属性保持不变。

示例评分控件的属性值如下:

MaxRating="21" CssClass="ratingThermometer" StarCssClass="ratingItem" WaitingStarCssClass="Saved" FilledStarCssClass="Filled" EmptyStarCssClass="Empty"

... 并显示一个从0到10的带有0.5步的温度计。因此,MaxRating计算为(10 / 0.5)+ 1。

修改后的控件渲染如下:

最后,需要根据控件的CurrentValue、MaxRating以及所需的MinimumRange和MaximumRange计算与图形相对应的值:

Public Shared Function EvaluateRating(ByVal CurrentValue As Integer, ByVal MaxRating As Integer, ByVal MinimumRange As Integer, ByVal MaximumRange As Integer) As Double If MinimumRange = 0 Then Dim FromZero As Integer = 1 Else Dim FromZero As Integer = 0 End If Dim Delta As Double = (MaximumRange - MinimumRange) / (MaxRating - 1) Dim Result As Double = Delta * CurrentValue - Delta * FromZero Return result End Function

注意点:

  • 不需要在每一页上使用cc1前缀并不必要地注册程序集。可以在Web.config中注册一次AjaxControlToolkit程序集。将以下内容添加到configuration/system.web/pages/controls节点:
<add tagPrefix="ajaxToolkit" namespace="AjaxControlToolkit" assembly="AjaxControlToolkit" />

然后,可以将cc1前缀替换为更易读的ajaxToolkit前缀,并从任何aspx页面中完全移除Register指令。源代码看起来比以前好多了。

目前,评分控件(AJAX Control Toolkit v1.0.10123.0)存在一个bug。当从源代码视图切换到设计视图时,会出现一个错误:“value”无法在属性'CurrentRating'上设置,如果value大于5。尽管如此,一切仍然可以工作。

当然,如果更喜欢,可以用C#编写代码。创建和评估的想法不会改变。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485