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

ASP.NET ImageMap 控件快速入门教程

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (26投票s)

2009年12月7日

Ms-PL

8分钟阅读

viewsIcon

96339

downloadIcon

2739

本文介绍了如何在 ASP.NET 中使用 ImageMap 控件

引言

本文通过 VB.NET 语言演示了如何使用 ImageMap 控件来创建太阳系行星的介绍。当图像中的行星被点击时,该行星的简要信息将显示在图像下方,并且 iframe 将导航到维基百科中对应的页面。

此示例项目已上传到 CodeProject 网站,您也可以从 All-In-One Code Framework 网站下载。

Microsoft All-In-One Code Framework 通过三种流行编程语言(Visual C#、VB.NET、Visual C++)的典型示例代码,阐述了 Microsoft 开发技术的框架和骨架。每个示例都经过精心挑选、编写和记录,以演示一个经常被问到、测试过或使用过的编码场景。

背景

ASP.NET 2.0 及后续版本中的 ImageMap 控件可用于创建包含已定义热点区域的图像。当用户点击一个热点区域时,控件可以生成一个回发到服务器的请求,或者导航到一个指定的 URL。

例如,您可以使用此控件显示一个地理区域的地图。当用户点击地图上的特定区域时,控件会导航到一个提供所选区域附加信息的 URL。或者,您可以使用 ImageMap 控件来捕获用户响应,例如投票。当用户点击为“是”投票定义的热点区域时,将调用代码将“是”的响应记录到数据库中。

在单个 ImageMap 控件中混合这两种场景也是支持的。例如,您可以指定一个热点区域进行 URL 导航,而另一个热点区域进行回发到服务器。

ImageMap 控件中定义了三种热点区域。它们如下:

  • RectangleHotSpot
  • CircleHotSpot
  • PolygonHotSpot

顾名思义,RectangleHotSpot 定义矩形热点区域。CircleHotSpot 定义圆形热点区域,而 PolygonHotSpot 用于不规则形状的热点区域。

要定义 RectangleHotSpot 对象的区域,请使用 LeftTopRightBottom 属性来表示区域本身的坐标。对于 CircleHotSpot 对象,将 XY 属性设置为圆心坐标。然后将 Radius 属性设置为从中心到边缘的距离。要定义 PolygonHotSpot 的区域,请将 Coordinates 属性设置为一个 string,该字符串指定 PolygonHotSpot 对象的每个顶点的坐标。多边形顶点是两条多边形边相遇的点。

Using the Code

让我们开始一个简单的演示,创建一个关于太阳系的介绍页面,以开始使用此控件。

首先,我们可以找到一张包含太阳系所有恒星的图片。

然后,我们将为图像中的每颗恒星设置一个相应热点区域,这样当用户点击特定区域时,我们就可以执行一些操作来做出响应。这里我想以行星木星为例,展示 CircleHotSpot 是如何工作的,因为它足够大,可以用于以下演示。

由于图像的左上角是坐标系的原点,X 轴向右延伸,Y 轴向下延伸,我们可以根据像素计算得出木星中心的坐标是 (410, 172)。另外,我们可以得到图像中行星的半径,等于 55 像素。

总结来说,我们可以使用如下代码在 ImageMap 控件中创建一个 CircleHotSpot

<asp:CircleHotSpot PostBackValue="Jupiter" 
                   AlternateText="Jupiter"
                   X="410" Y="172" Radius="55" 
                   HotSpotMode="PostBack" />

其他六颗行星:水星、金星、地球、火星、天王星和海王星也可以做同样的事情,因为它们在图像中都覆盖了圆形区域。当涉及到土星时,情况会更复杂。

由于土星有光环,它在图像中覆盖了一个不规则形状的热点区域。所以我们需要使用 PolygonHotSpot

要定义一个多边形区域,我们需要使用 Coordinates 属性来指定区域顶点的坐标。多边形顶点是两条多边形边相遇的点。您指定的字符串必须格式化为每个坐标用逗号分隔。您指定的每个顶点都必须同时具有 x 坐标和 y 坐标。例如,字符串 "128,185,335,157,510,224,510,383,228,383" 定义了一个具有五个顶点的多边形热点。

  • (128, 185)
  • (335, 157)
  • (510, 224)
  • (510, 383)
  • (228, 383)

现在,让我们来看看这里的土星。为了实现无论用户点击行星本身还是行星周围的光环,都能执行处理函数,我们将不规则形状区域的 12 个点作为土星的顶点。

请注意,左上角不再是 (0, 0),因为上面的屏幕截图是从原始图像中截取的。和我们之前所做的相同,我们通过 (X 坐标, Y 坐标) 获取这些顶点的坐标,并将它们的值设置给 PolygonHotSpotCoordinates 属性。因此,代码将如下所示:

<asp:PolygonHotSpot PostBackValue="Saturn"
                AlternateText="Saturn"
                Coordinates="492,235,
                             471,228,
                             522,179,
                             540,133,
                             581,126,
                             593,134,
                             657,110,
                             660,126,
                             615,167,
                             608,203,
                             563,219,
                             542,214"
                HotSpotMode="PostBack" />

现在我们已经能够形状化图像中所有行星的区域了,接下来需要做的是处理 ImageMap 控件的点击事件,以响应用户的这种行为。

当用户点击 ImageMap 控件时,我们需要触发一个回发,因此需要将 ImageMap.HotSpotMode 属性或 HotSpot.HotSpotMode 属性设置为 HotSpotMode.Postback。此外,我们需要使用 PostBackValue 属性为热点区域指定一个名称。当发生回发事件时,此名称将作为 ImageMapEventArgs 事件数据传递。当点击一个回发 HotSpot 时,将触发 Click 事件。要以编程方式控制回发 HotSpot 被点击时执行的操作,请为 Click 事件提供一个事件处理程序。

让我们看一下代码隐藏页面中的 ImageMap.Click 事件处理函数。

Protected Sub imgMapSolarSystem_Click(ByVal sender As Object, 
                                      ByVal e As System.Web.UI.WebControls.
				  ImageMapEventArgs) 
                                      Handles imgMapSolarSystem.Click
    'Code
End End Sub

在事件处理函数中,我们可以使用 eImageMapEventArgs 事件数据)来获取有关 ImageMap 中哪个区域被点击的信息。例如,如果用户点击了 Earth,我们可以从 ePostBackValue 属性中获取此信息,因为我们已经将覆盖 EarthCircleHotSpotPostBackValue 设置为 "Earth"。

'If a user clicks on the Earth, the regionName will be equal to Earth
Dim regionName As String = e.PostBackValue

了解这一点后,我们最终可以编写如下的事件处理函数,使用 Select Case 语句和 e.PostBackValue 属性:

Protected Sub imgMapSolarSystem_Click(ByVal sender As Object, 
                                      ByVal e As System.Web.
				  UI.WebControls.ImageMapEventArgs) 
                                      Handles imgMapSolarSystem.Click
    Select Case e.PostBackValue
        Case "Mercury"
            'When user clicks on the Mercury region
            'Code
        Case "Venus"
            'When user clicks on the Venus region
            'Code
        Case "Earth"
        Case "Mars"
        Case "Jupiter"
        Case "Saturn"
        Case "Uranus"
        Case "Neptune"
        Case Else
            'When user doesn't click on any planet in the image
    End Select
End End Sub

演练

在本节中,我将逐步讲解演示项目的创建过程。

步骤 1。在 Visual Studio 2008 / Visual Web Developer 中创建一个 Visual Basic ASP.NET Web 应用程序,并将其命名为 VBASPNETImageMap

步骤 2。将一个 ImageMap 控件添加到页面中,并将其 ID 属性更改为 imgMapSolarSystem

[注意] ImageMap 可以包含已定义的热点区域。当用户点击一个热点区域时,控件可以生成一个回发到服务器的请求,或者导航到一个指定的 URL。本演示旨在生成一个回发到服务器的请求,并根据从 ImageMap 控件中点击的热点区域运行特定代码。有关演示导航到不同 URL 的示例,请参考以下代码,并注意 RectangleHotSpot 标签中的 NavigateUrl 属性。

<asp:ImageMap ID="ImageMap4Navigate" runat="Server" 
    ImageUrl="image.jpg"><asp:RectangleHotSpot AlternateText="Button 1" 
        Bottom="100" HotSpotMode="Navigate" Left="200" NavigateUrl="navigate1.htm" 
        Right="300" Top="20" /></asp:ImageMap>

步骤 3:按照演示创建 ImageMap 标签内的 RectangleHotSpotsCircleHotSpotsPolygonHotSpot

[注意] ImageMap 控件中有三种热点:RectangleHotSpotCircleHotSpotPolygonHotSpot。顾名思义,RectangleHotSpot 定义矩形热点区域。CircleHotSpots 定义圆形热点区域,而 PolygonHotSpot 用于不规则形状的热点区域。

要定义 RectangleHotSpot 对象的区域,请使用 LeftTopRightBottom 属性来表示区域本身的坐标。对于 CircleHotSpot 对象,将 XY 属性设置为圆心坐标。然后将 Radius 属性设置为从中心到边缘的距离。要定义 PolygonHotSpot 的区域,请将 Coordinates 属性设置为一个 string,该字符串指定 PolygonHotSpot 对象的每个顶点的坐标。多边形顶点是两条多边形边相遇的点。

有关这三种热点的更多信息,请参考“参考文献”部分中的链接。

步骤 4:在页面的设计视图中双击 ImageMap 控件,以 Visual Basic .NET 语言打开代码隐藏页面。

步骤 5:将代码定位到 imgMapSolarSystem_Click 事件处理程序中,并使用 Select Case 来根据 PostBackValue 创建不同的行为。

[注意] 要使热点生成回发到服务器,请将 HotSpotMode 属性设置为 Postback,并使用 PostBackValue 属性为区域指定一个名称。此名称将在回发发生时作为 ImageMapEventArgs 事件数据传递。

关注点

至此,我们就可以使用 ImageMap 控件几乎创建一个太阳系介绍页面了。如果您想要完整的演示,可以参考 All-In-One Code Framework 在 http://cfx.codeplex.com/ 上的名为 VBASPNETImageMap 的项目。如果遇到任何问题,您可以查看示例项目中的 ReadMe.txt 文件,其中包含了一个分步教程,说明如何构建此类项目。

在本次快速入门教程结束之前,我建议您参考 MSDN 上关于 ImageMap 类和三个 HotSpot 类的链接。它们肯定会为您提供更多关于如何在 ASP.NET 中使用 ImageMap 控件的信息和好的示例代码。

历史

  • 2009 年 12 月 6 日:初次发布
  • 2009 年 12 月 8 日:修正文章格式
© . All rights reserved.