5.19 其他控件

  在ASP.NET中,除了以上常用的一些基本控件以外,还有一些其他基本控件,虽然在应用程序开发中并不经常使用,但是在特定的程序开发中,还是需要使用到这些基本的控件进行特殊的应用程序开发和逻辑处理。

5.19.1 隐藏输入框控件(HiddenField)
  HiddenField控件就是隐藏输入框控件,用来保存那些不需要显示在页面上的对安全性要求不高的数据。隐藏输入框控件作为<input type=“hidden”/>元素呈现在HTML页面。由于HiddenField隐藏输入框控件的值会呈现在客户端浏览器,所以对于安全性较高的数据,并不推荐将它保存在隐藏输入框控件中。隐藏输入框控件的值通过Value属性保存,同时也可以通过代码来控制Value的值,利用隐藏输入框对页面的值进行传递,示例代码如下所示。
+展开
-C#
        protected void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = HiddenField1.Value;//获取隐藏输入框控件的值
        }

上述代码通过Value属性获取一个隐藏输入框的值,如图5-62所示。单击后如图5-63所示。
HiddenField的值被隐藏
图5-62 HiddenField的值被隐藏
HiddenField的值被获取
图5-63 HiddenField的值被获取

  HiddenField是通过HTTP协议进行参数传递的,所以当打开新的窗体或者使用method=get都无法使用HiddenField隐藏输入框控件。同时,隐藏输入框控件还能初始化或保存一些安全性不高的数据。当双击隐藏输入框控件时,系统会自动生成ValueChanged事件代码段,当隐藏输入框控件内的值被改变时则触发该事件,示例代码如下所示。
+展开
-HTML
        protected void Button1_Click(object sender, EventArgs e)
        {
            HiddenField1.Value = "更改了值";//更改隐藏输入框控件的值
        }
        protected void HiddenField1_ValueChanged(object sender, EventArgs e)//更改将触发此事件
        {
            Label1.Text = "值被更改了,并被更改成\"" + HiddenField1.Value + "\"";
        }

  上述代码创建了一个ValueChanged事件,并当隐藏输入框控件的值被更改时,如图5-64所示。单击【change】按钮后会触发按钮事件,运行结果如图5-65所示。
更新前
图5-64 更新前
更新后
图5-65 更新后

5.19.2 图片热点控件(ImageMap)
  ImageMap控件是一个让你可以在图片上定义热点(HotSpot)区域的服务器控件。用户可以通过点击这些热点区域进行回发(PostBack)操作或者定向(Navigate)到某个URL位址。该控件一般用在需要对某张图片的局部范围进行互动操作。ImageMap控件主要由两个部分组成,第一部分是图像。第二部分是作用点控件的集合。其主要属性有HotSpotMode、HotSpots,具体如下所示。
1.HotSpotMode(热点模式)常用选项
?1)NotSet:未设置项。虽然名为未设置,但其实默认情况下会执行定向操作,定向到你指定的URL位址去。如果你未指定URL位址,那默认将定向到自己的Web应用程序根目录。
?2)Navigate:定向操作项。定向到指定的URL位址去。如果你未指定URL位址,那默认将定向到自己的Web应用程序根目录。
?3)PostBack:回发操作项。点击热点区域后,将执行后部的Click事件。
?4)Inactive:无任何操作,即此时形同一张没有热点区域的普通图片。

2.HotSpots(图片热点)常用属性
  该属性对应着System.Web.UI.WebControls.HotSpot对象集合。HotSpot类是一个抽象类,它之下有CircleHotSpot(圆形热区)、RectangleHotSpot(方形热区)和PolygonHotSpot(多边形热区)三个子类。实际应用中,都可以使用上面三种类型来定制图片的热点区域。如果需要使用到自定义的热点区域类型时,该类型必须继承HotSpot抽象类。同时,ImageMap最常用的事件有Click,通常在HotSpotMode为PostBack时用到。当需要设置HotSpots属性时,可以可视化设置,如图5-66所示。
可视化设置HotSpots属性
图5-66 可视化设置HotSpots属性

  当可视化完毕后,系统会自动生成HTML代码,核心代码如下所示。
+展开
-HTML
    <asp:ImageMap ID="ImageMap1" runat="server" HotSpotMode="PostBack" 
        ImageUrl="~/images/mobile.jpg" onclick="ImageMap1_Click">

        <asp:CircleHotSpot Radius="15" X="15" Y="15" HotSpotMode="PostBack" PostBackValue="0" />
        <asp:CircleHotSpot Radius="100" X="15" Y="15" HotSpotMode="PostBack" PostBackValue="1" />
        <asp:CircleHotSpot Radius="300" X="15" Y="15" HotSpotMode="PostBack" PostBackValue="2" />
    </asp:ImageMap>

  上述代码还添加了一个Click事件,事件处理的核心代码如下所示。
+展开
-C#
        protected void ImageMap1_Click(object sender, ImageMapEventArgs e)
        {
            string str="";
            switch (e.PostBackValue)//获取传递过来的参数
            { 
                case "0":
                    str = "你点击了1号位置,图片大小将变为1号"break;
                case "1":
                    str = "你点击了2号位置,图片大小将变为3号"break;
                case "2":
                    str = "你点击了3号位置,图片大小将变为3号"break;
            }
            Label1.Text = str;
            ImageMap1.Height =120*(Convert.ToInt32(e.PostBackValue)+1); //更改图片的大小
        }

  上述代码通过获取ImageMap中的CricleHotSpot控件中的PostBackVlue值来获取传递的参数,如图5-67所示。当获取到传递的参数时,可以通过参数做相应的操作,如图5-68所示。
单击图片变大
图5-67 单击图片变大
击图片变小
图5-68 单击图片变小

5.19.3 静态标签控件(Lieral)
  通常情况下Lieral控件无需添加任何HTML元素即可将静态文本呈现在网页上。与Label不同的是,Label控件在生成HTML代码时,会呈现<span>元素。而Lieral控件不会向文本中添加任何HTML代码。如果开发人员希望文本和控件直接呈现在页面中而不使用任何附加标记时,推荐使用Lieral控件。

  与Label不同的是,Lieral控件有一个Mode属性,用来控制Lieral控件中的文本的呈现形式。当HTML代码被输出到页面的时候,会以解释后的HTML形式输出。例如图片代码,在HTML中是以<img src=“”>的形式显示的,输出到HTML页面后,会被显示成一个图片。

  在Label中,Label可以作为一段HTML代码的容器,当输出时,Label控件所呈现的效果是HTML被解释后的样式。而Lieral可以通过Mode属性来选择输出的是HTML样式还是HTML代码,核心代码如下所示。
+展开
-C#
namespace _5_17
{
    public partial class Lieral : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string str = "<span style=\"color:red\">大家好</span>,您现在查看的是HTML样式。";//HTML字符
            Literal1.Text = str +
            "<div style=\"border-top:1px dashed #ccc;background:gray\">单击按钮查看HTML代码</div>";
            Label1.Text = str;//赋值Label
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Literal1.Mode = LiteralMode.Encode;//转换显示的模式
        }
    }
}

  上述代码将一个HTML形式的字符串分别赋值给Literal和Label控件,并通过转换查看赋值的源代码,运行结果如图5-69和图5-70所示。
Literal控件直接显式HTML样式
图5-69 Literal控件直接显式HTML样式
Literal控件显式HTML代码
图5-70 Literal控件显式HTML代码

  当点击了按钮后,更改了Literal的模式之后,Literal中的HTML文本被直接显示,Literal的具有三种模式,具体如下:
?1)Transform:添加到控件中的任何标记都将进行转换,以适应请求浏览器的协议。
?2)PassThrough:添加到控件中的任何标记都将按照原样输出在浏览器中。
?3)Encode:添加到控件中的任何标记都将使用HtmlEncode方法进行编码,该方法将把HTML编码转换为其文本表示形式。
注意:PassThrough模式和Ttansform模式在通常情况下,呈现的效果并没有区别。

5.19.4 动态缓存更新控件(Substitution)
  在ASP.NET中,缓存的使用能够极大的提高网站的性能,降低服务器的压力。而通常情况下,对ASP.NET整个页面的缓存是没有任何意义的,这样经常会给用户带来疑惑。Substitution动态缓存更新控件允许用户在页上创建一些区域,这些区域可以用动态的方式进行更新,然后集成到缓存页。

  Substitution动态缓存更新控件将动态内容插入到缓存页中,并且不会呈现任何HTML标记。用户可以将控件绑定到页上或父用户控件上的方法,自行创建静态方法,以返回要插入到页面中的任何信息。同时,要使用Substitution控件,则必须符合以下标准:
?1)此方法被定义为静态方法。
?2)此方法接受HttpContext类型的参数。
?3)此方法返回String类型的值。
  在ASP.NET页面中,为了减少用户与页面的交互中数据库的更新,可以对ASP.NET页面进行缓存,缓存代码可以使用页面参数的@OutputCatch,示例代码如下所示。
+展开
-HTML
<%@ Page 
Language="C#" AutoEventWireup="true" CodeBehind="Substitution.aspx.cs" Inherits="_5_17.Substitution" %>

<%@ OutputCache Duration="100" VaryByParam="none" %> //增加一个页面缓存
<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        当前的时间为:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        (有缓存)<br >
        当前的时间为:<asp:Substitution ID="Substitution1" runat="server"  MethodName="GetTimeNow"/>
        (动态更新)</div>
    </form>
</body>
</html>

  执行事件操作的cs页面核心代码如下所示。
+展开
-C#
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToString();//页面初始化时,当前时间赋值给Label1标签
        }
        protected static string GetTimeNow(HttpContext con)//注意事件的格式
        {
            return DateTime.Now.ToString();//Substitution控件执行的方法
        }

  上述代码对ASP.NET页面进行了缓存,当用户访问页面时,除了Substitution控件的区域以外区域都会被缓存,而使用了Substitution控件局部在刷新后会进行更新,运行结果如图5-71所示。
Substitution动态更新
图5-71 Substitution动态更新

  如运行结果可见,没有使用Substitution控件的区域,当页面再次被请求时,会直接在缓存中执行。而Substitution控件区域内的值并不会缓存。在每次刷新时,页面将进行Substitution控件的区域的局部的动态更新。

加支付宝好友偷能量挖...


评论(0)网络
阅读(114)喜欢(0)Asp.Net/C#/WCF