使用 MultiView 控件的简单 ASP.NET 选项卡控件






4.61/5 (78投票s)
2006年2月22日
3分钟阅读

1392050

33550
一个使用 ASP.NET MultiView 和 Menu 控件的简单选项卡控件。
引言
最近,我一直在使用 ASP.NET 2.0 编写一个小型 Web 抓取应用程序。在此期间,我试图研究 ASP.NET 2.0 中可用的一些新控件。我发现特别有趣的一个 2.0 控件是 MultiView 控件。新的 MultiView 控件与嵌入的 View 控件协同工作。每个 View 控件都充当内容容器,并且行为非常类似于 Panel 或 Canvas 区域。在运行时,MultiView 控件管理 View 控件,以确保一次只显示一个 View。我们可以使用 MultiView 控件的 ActiveViewIndex 属性来指定在任何特定时间应显示哪个 View。听起来有点像 Tab 控件,对吧?我想要做的是实现一个快速的选项卡控件,而不必购买商业组件。免责声明,商业组件更加健壮,可能值得购买,但如果您没有现金或者不需要“凯迪拉克”,那么以下代码提供了一个非常简单的解决方案。
关于该控件
当我开始编写我的简单选项卡控件时,我的脑海里一直有这篇文章,CSS 和圆角:构建可访问的菜单选项卡:一篇关于如何使用 CSS 技巧和图像制作选项卡控件的精彩文章。
我想做的是将这篇 CSS 文章中的想法与 ASP.NET Menu 和 MultiView 控件结合起来,创建一个相对漂亮的选项卡控件。这就是我想出来的
首先,我将一个 Menu 控件放在我的页面上。Menu 控件将呈现我的“选项卡”,并且也是 MultiView 控件的控制器。我将菜单设置为水平方向。同样,我给每个 MenuItem 一个指向我的选项卡图像的 ImageURL。请注意,您将必须根据需要实现自己的选项卡图像。以下是我的 Menu 控件规范
<asp:Menu
        ID="Menu1"
        Width="168px"
        runat="server"
        Orientation="Horizontal"
        StaticEnableDefaultPopOutImage="False"
        OnMenuItemClick="Menu1_MenuItemClick">
    <Items>
        <asp:MenuItem ImageUrl="~/selectedtab.GIF" 
                      Text=" " Value="0"></asp:MenuItem>
        <asp:MenuItem ImageUrl="~/unselectedtab.GIF" 
                      Text=" " Value="1"></asp:MenuItem>
        <asp:MenuItem ImageUrl="~/unselectedtab.GIF" 
                      Text=" " Value="2"></asp:MenuItem>
    </Items>
</asp:Menu>
接下来,我将我的 MultiView 控件放在我的页面上。请注意,每个 View 控件都包含一个带有 <td> 标签的表格,该标签将保存活动选项卡的所有内容。将 <td> 元素视为选项卡内容的占位符。我将这个 <td> 元素放在一个名为“TabArea”的 CSS 类中。这个类在内容周围放置一个边框。请参阅示例下载中的样式表。
<asp:MultiView 
    ID="MultiView1"
    runat="server"
    ActiveViewIndex="0"  >
   <asp:View ID="Tab1" runat="server"  >
        <table width="600" height="400" cellpadding=0 cellspacing=0>
            <tr valign="top">
                <td class="TabArea" style="width: 600px">
                    <br />
                    <br />
                    TAB VIEW 1
                    INSERT YOUR CONENT IN HERE
                    CHANGE SELECTED IMAGE URL AS NECESSARY
                </td>
            </tr>
        </table>
     </asp:View>
    <asp:View ID="Tab2" runat="server">
        <table width="600px" height="400px" cellpadding=0 cellspacing=0>
            <tr valign="top">
                <td class="TabArea" style="width: 600px">
                <br />
                <br />
                    TAB VIEW 2
                    INSERT YOUR CONENT IN HERE
                    CHANGE SELECTED IMAGE URL AS NECESSARY
                </td>
            </tr>
        </table>
    </asp:View>
    <asp:View ID="Tab3" runat="server">
        <table width="600px" height="400px" cellpadding=0 cellspacing=0>
            <tr valign="top">
                <td class="TabArea" style="width: 600px">
                <br />
                <br />
                  TAB VIEW 3
                  INSERT YOUR CONENT IN HERE
                  CHANGE SELECTED IMAGE URL AS NECESSARY
                </td>
            </tr>
        </table>
    </asp:View>
</asp:MultiView>
最后,我将 Menu 控件的 MenuItemClick 事件连接到下面的方法
Protected Sub Menu1_MenuItemClick(ByVal sender As Object, _
          ByVal e As MenuEventArgs) Handles Menu1.MenuItemClick
    MultiView1.ActiveViewIndex = Int32.Parse(e.Item.Value)
    Dim i As Integer
    'Make the selected menu item reflect the correct imageurl
    For i = 0 To Menu1.Items.Count - 1
        If i = e.Item.Value Then
            Menu1.Items(i).ImageUrl = "selectedtab.gif"
        Else
            Menu1.Items(i).ImageUrl = "unselectedtab.gif"
        End If
    Next
End Sub
在此事件中,您可以看到我根据单击的选项卡(实际上是一个 MenuItem)设置了要显示的关联视图。同样,我为选定的 MenuItem 设置了正确的 ImageUrl。这基本上是交换选项卡的图像。这应该是您希望选定选项卡看起来的样子。在我的示例中,我有两个图像,一个选定的选项卡和一个未选定的选项卡。这就是我的示例在选择“选项卡 2”时的样子

此控件基本上依赖于一些基本的 CSS 样式以及 ASP.NET Menu 和 MultiView 控件。很简单,对吧?
希望您能找到一些用处。
