首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

在前面的章节中,已经介绍了标准的ASP.NET服务器控件,它们都或多或少地与传统HTML控件类似。另外,ASP.NET还提供了大量的功能更强大的控件,这些控件分别是:

MultiView和View控件

共同用于创建一组可导航的页面。

Wizard

创建一组对话框,以引导用户通过一组定义好的步骤来完成某些任务。

FileUpload

包括一个用于选择文件上传的文件浏览器及相关的基础构造。

AdRotator

当每次页面加载时呈现从列表中随机选择的图片。

Calendar

一个功能完整的用于显示和选择时间的控件。

所有这些控件都将在本章中介绍。此外,ASP.NET还提供了各种专门的控件,用以完成如验证、数据操作、安全和登录、个性化及导航等功能。它们中的每类控件都将有单独的章节进行介绍。

MultiView和View控件

MultiView and View Controls

有时可能要把一个web页面分成不同的块,而每次只显示其中一块,同时,又能方便地在块与块之间导航。该技术常用于在一个静态页面中引导用户完成多个步骤的操作,

例如,在线商店的检验过程或账户间的汇款过程。尽管已经有一个专门为此目的设计的Wizard控件,但是仍然可能使用MultiView和View控件来创建类似于向导的应用程序。

块是页面中某区域的内容,ASP.NET提供了View控件对块进行管理。每个块对应一个View控件,所有View对象包含在MultiView对象中。MultiView中每次只显示一个View对象。这个对象称为活动视图。

如图3-4a所示,View和MultiView控件并不是继承自WebControl,而是从System. Web. UI.Control类继承。

MultiView控件有一个类型为ViewCollection的只读属性View。使用该属性可获得包含在MultiView中的View对象集合。与所有的.NET集合一样,该集合中的元素被编入索引。MultiView控件包含ActiveViewIndex属性,该属性可获取或设置以0开始的,当前活动视图的索引。如果没有视图是活动的,那么ActiveViewIndex为默认值-1。

表5-1中列出了MultiView控件的4个CommandName字段。为按钮的CommandName属性赋值,能够实现视图导航。

表5-1  MultiView控件的CommandName字段

字  段

默认命令名

说  明

NextViewCommandName

NextView

导航到下一个具有更高ActiveViewIndex值的视图。如果当前位于最后的视图,则设置Active- ViewIndex为-1,不显示任何视图

PreviousViewCommandName

PrevView

导航到低于ActiveVie- wIndex值的视图。如果当前位于第一个视图,则设置ActiveViewIndex为-1,不显示任何视图

SwitchViewByIDCommandName

SwitchViewByID

导航到指定ID的视图,可以使用CommandArg- ument指定ID值

SwitchViewByIndexCommandName

SwitchViewByIndex

导航到指定索引的视图,使用CommandArgument属性指定索引

例如,将Button、ImageButton或LinkButton控件的CommandName属性设置为NextView,单击这些按钮后将自动导航到下一个视图,而不需要额外的代码。开发者不需要为按钮编写单击事件处理程序。

通过调用MultiView控件的SetActiveView或GetActiveView方法也可以设置或获取活动视图。SetActiveView使用View对象作为参数,而GetActiveView则返回一个View对象。

提示:记住,即使视图不可见,它所包括的所有控件对于应用程序和服务器端也都是可用的。不仅在代码中可用,而且还具有自己的视图状态,并作为页面的控件集合的一部分。

每次视图发生变化时,页面都会被提交到服务器,同时MultiView控件和View控件将触发多个事件。

活动视图发生变化时,MultiView控件将触发ActiveViewChanged事件。与此同时,新的活动视图将触发Activate事件,原活动视图则触发Deactivate事件。

所有的事件都包含一个EventArgs类型的参数。该参数只是一个占位符,它没有提供与事件相关的附加信息。然而,与所有的事件处理程序一样,对事件源的引用将传递给事件处理程序。

View控件包含一个Boolean类型的Visible属性,设置该属性可以控制特定View对象的可见性,或以编程方式确定哪一个View是可见的。

MultiView和View控件都没有样式属性。对于MultiView控件而言,这没什么可大惊小怪的。毕竟它只不过是View控件的容器而已。对于View控件而言,如果要使用样式属性,则必须将样式应用到每一个它包含的控件中。还有一种方法是在View控件中嵌入一个Panel控件,并设置Panel的样式属性。

下一个示例MultiViewDemo说明了MultiView和View控件的诸多特征。经过几次导航后的页面如图5-1所示。

图5-1:MultiViewDemo

MultiViewDemo的设计视图如图5-2所示,它由一个包含MultiView控件的页面组成。该MultiView控件名为MultiView1。MultiView1中包括4个View对象(vwFirst、vwSecond、vwThird和vwLast),以及其他用于导航的控件。该页面还包括一些用于显示MultiView和它所包含的View控件信息的控件。

每个View对象都包含导航按钮。此外,第一个View还包含一个TextBox控件。该控件用于说明当View不可见时,应用程序事件如何访问它所包含的控件。

为了创建该应用程序,可在VS2005中创建一个名为MultiViewDemo的网站。示例5-1列举了该示例的完整内容文件,其中MultiView和View都已高亮显示。首先查看源文件中MultiView和View控件,稍后再研究页面上的其他控件。

图5-2:MultiViewDemo的设计视图

示例5-1:MultiViewDemo网站的Default.aspx

<%@ Page Language=”C#” AutoEventWireup=”true”  CodeFile=”Default.aspx.cs”

Inherits=”_Default” %>

<!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>MultiView & View Controls</title>

</head>

<body>

   <form id=”form1” runat=”server”>

   <div>

      <h1>MultiView & View Controls</h1>

      <br />

         <asp:RadioButtonList ID=”rblView” runat=”server”

                AutoPostBack=”True”

                OnSelectedIndexChanged=”rblView_SelectedIndexChanged”

                RepeatDirection=”Horizontal” >

            <asp:ListItem Value=”-1”>Nothing</asp:ListItem>

            <asp:ListItem Selected=”True” Value=”0”>First</asp:ListItem>

            <asp:ListItem Value=”1”>Second</asp:ListItem>

            <asp:ListItem Value=”2”>Third</asp:ListItem>

            <asp:ListItem Value=”3”>Last</asp:ListItem>

         </asp:RadioButtonList>

         <br />

         Current Index:

         <asp:Label ID=”lblCurrentIndex” runat=”server”></asp:Label>

         <br/>

         <asp:MultiView ID=”MultiView1” runat=”server”

             ActiveViewIndex=”0”

             OnActiveViewChanged=”MultiView1_ActiveViewChanged”>

            <asp:View ID=”vwFirst” runat=”server”

                OnActivate=”ActivateView”

                OnDeactivate=”DeactivateView”>

                <h2>First View</h2>

                <asp:TextBox ID=”txtFirstView” runat=”server” />

                <asp:Button ID=”btnNext1” runat=”server”

                    CommandName=”NextView”

                    Text=”Go To Next” />

                <asp:Button ID=”btnLast” runat=”server”

                    CommandName=”SwitchViewByID”

                    CommandArgument=”vwLast”

                    Text=”Go to Last” />

            </asp:View>

            <asp:View ID=”vwSecond” runat=”server”

                OnActivate=”ActivateView”

                OnDeactivate=”DeactivateView”>

                <h2>Second View</h2>

                <asp:TextBox ID=”txtSecondView” runat=”server” />

                <asp:Button ID=”btnNext2” runat=”server”

                   CommandName=”NextView”

                   Text=”Go To Next” />

                <asp:Button ID=”btnPrevious2” runat=”server”

                   CommandName=”PrevView”

                   Text=”Go to Previous” />

            </asp:View>

            <asp:View ID=”vwThird” runat=”server”

               OnActivate=”ActivateView”

               OnDeactivate=”DeactivateView”>

               <h2>Third View</h2>

               <br />

               <asp:Button ID=”btnNext3” runat=”server”

                  CommandName=”NextView”

                  Text=”Go To Next” />

               <asp:Button ID=”btnPrevious3” runat=”server”

                  CommandName=”PrevView”

                  Text=”Go to Previous” />

            </asp:View>

            <asp:View ID=”vwLast” runat=”server”

                 OnActivate=”ActivateView”

                 OnDeactivate=”DeactivateView”>

                <h2>Last View</h2>

                <asp:Button ID=”btnPrevious4” runat=”server”

                   CommandName=”PrevView”

                   Text=”Go to Previous” />

                <asp:Button ID=”btnFirst” runat=”server”

                   CommandArgument=”0”

                   CommandName=”SwitchViewByIndex”

                   Text=”Go to First” />

            </asp:View>

         </asp:MultiView>

      <br />

      <br />

      First TextBox: 

      <asp:Label ID=”lblFirstTextBox” runat=”server” />

      <br />

      Second TextBox: 

      <asp:Label ID=”lblSecondTextBox” runat=”server” />

      <br />

      <br />

      <strong><span style=”text-decoration: underline”>

         View Activation History:

      </span></strong>

      <br />

      <asp:Label ID=”lblViewActivation” runat=”server” />

   </div>

   </form>

</body>

</html>

示例5-1中高亮显示的MultiView控件,ID属性声明为MultiView1,ActiveViewIndex属性设置为0,这样可显示View集合中的第一个视图。如果没有设置ActiveViewIndex属性,则默认为-1,即不显示任何视图。

OnActiveViewChanged属性指向代码隐藏文件中的事件处理方法MultiView1_Active- ViewChanged(在示例5-2中列出),该事件处理方法在更改活动索引时执行。

示例5-2:MultiViewDemo网站的ActiveViewChanged事件处理程序

protected void MultiView1_ActiveViewChanged(object sender, EventArgs e)

{

   lblFirstTextBox.Text = txtFirstView.Text;

   lblSecondTextBox.Text = txtSecondView.Text;

   rblView.SelectedIndex = MultiView1.ActiveViewIndex + 1;

}

该事件处理程序完成两个任务:一个是获取前两个视图中的文本框值,并把它们显示

在页面标签上。另一个任务是将页面顶部的RadioButtonList控件rblView设置为合适的项。这些代码相对比较简单,因为RadioButtonList.SelectedIndex和MultiView. ActiveViewIndex属性都是整型值。然而须注意,ActiveViewIndex属性最小值为-1,而RadioButtonList的最小索引值是0。也就是说,二者的偏移量为1。

该示例声明了4个View实例:vwFirst、vwSecond、vwThird和vwLast。每一个View控件都声明了OnActivate和OnDeactivate事件处理程序。

OnActivate=”ActivateView”

OnDeactivate=”DeactivateView”>

Activate事件由ActivateView方法处理,Deactivate事件由DeactivateView方法处理。示例5-3列出了这两个事件处理程序。它们保存有激活记录的Label控件的内容,并为之添加当前视图的ID和当前View的动作,然后将得到的字符串再赋值给Label控件。

示例5-3:Activate和Deactivate事件处理程序

protected void ActivateView(object sender, EventArgs e)

{

   string str = lblViewActivation.Text;

   View v = (View)sender;

   str += “View “ + v.ID + “ activated <br/>”;

   lblViewActivation.Text = str;

}

protected void DeactivateView(object sender, EventArgs e)

{

   string str = lblViewActivation.Text;

   View v = (View)sender;

   str += “View “ + v.ID + “ deactivated <br/>”;

   lblViewActivation.Text = str;

}

提示:由于sender是object的类型,它必须先转换为View类型再赋值给View的引用,然后再获取该View对象的属性,例如ID属性。

每个View对象都包含导航按钮。在 .NET Framework中创建这些控件非常简单(把它解释清楚要比实际操作更困难)。如表5-1所示,如果按钮的CommandName属性设置为默认值之一,则它所表示的动作将自动发生。因此,第一个View对象vwFirst包含了标签为“Go To Next”和“Go To Last”的两个按钮,它们的CommandName属性值分别为NextView和SwitchViewByID。第一个按钮很简单,仅仅是导航到下一个视图。

SwitchByViewID需要一个要切换到的ID,而CommandArgument属性则用于传递该参数。

CommandName=”SwitchViewByID”

CommandArgument=”vwLast”

除了导航按钮外,每个View对象还包含其他内容。这些内容包括标准的HTML元素和ASP.NET服务器控件。如同所见,这些服务器控件在View不可见时,也可以在应用程序事件中进行访问。

下一步是更新页面顶部的RadioButtonList。正如所见,SelectedIndex属性在活动视图改变时由MultiView1_ActiveViewChanged中的代码设置。当用户的操作改变SelectedIndex时,则触发SelectedIndexChanged事件,该事件的事件处理程序为rblView_SelectedIndexChanged。

OnSelectedIndexChanged=”rblView_SelectedIndexChanged”

示例5-4中的方法只有一行代码,该行代码设置MultiView控件的ActiveViewIndex属性为RadioButtonList的SelectedValue属性值。

示例5-4:RadioButtonList控件的SelectedIndexChanged事件处理程序

protected void rblView_SelectedIndexChanged(object sender, EventArgs e)

{

   MultiView1.ActiveViewIndex = Convert.ToInt32(rblView.SelectedValue);

}

还有些代码包含在页面PreRender事件的事件处理程序中(在示例5-5中列出)。在这个事件处理程序中,使用当前活动视图的索引填充lblCurrentIndex。这些代码不能运行在Page_Load方法中,因为Page_Load将在标签更新前运行。

提示:关于完整的页面生命周期的介绍,可参见第6章。

示例5-5:页面的PreRender事件处理程序

protected void Page_PreRender(object sender, EventArgs e)

{

   lblCurrentIndex.Text = MultiView1.ActiveViewIndex.ToString(  );

}

了解了如何使用MultiView控件创建简单的分页应用程序,可以把它扩展为更复杂的应用。有时要在页面上放置一个Windows样式的向导,这时可以使用下面所讨论的Wizard控件。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论