在ASP.NET网站中,有时需要以图形化的方式展示评分,比如使用温度计或仪表盘的形式。本文将介绍如何使用AJAX Control Toolkit中的评分控件来实现这一需求,并设置CSS和图片以显示为仪表盘或温度计。
在开发一个AJAXASP.NET网站时,面临了创建一个温度计的需求。需要配置参数范围并使用不同的图形来展示。
要使用评分控件并创建仪表盘/温度计,需要满足以下条件:
首先,需要在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类名识别:
还有两种更多的样式:
控件的渲染如下:
但是,如果想要使用其他的图形呢?如果想要有一个1到10的比率呢?如果想要能够选择甚至零或“未选择”的值呢?
简单地说,评分控件允许这样做。只需要编写一些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
注意点:
<add tagPrefix="ajaxToolkit" namespace="AjaxControlToolkit" assembly="AjaxControlToolkit" />
然后,可以将cc1前缀替换为更易读的ajaxToolkit前缀,并从任何aspx页面中完全移除Register指令。源代码看起来比以前好多了。
目前,评分控件(AJAX Control Toolkit v1.0.10123.0)存在一个bug。当从源代码视图切换到设计视图时,会出现一个错误:“value”无法在属性'CurrentRating'上设置,如果value大于5。尽管如此,一切仍然可以工作。
当然,如果更喜欢,可以用C#编写代码。创建和评估的想法不会改变。