Web用户控件动态变化

时间:2012-03-29 16:13:09

标签: c# asp.net

我的结构是这样的: 母版页   aspx(网络表单)     ascx(用户控件)

我有一个带菜单的主人:

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
                IncludeStyleBlock="false" Orientation="Horizontal">
<Items>
            <asp:MenuItem Text="Parameters" Value="Parameters">
                   <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Default" Value="def" />
    </asp:MenuItem>
</Items>
</asp:Menu>

在MenuItem中,必须有一个指向我想在default.aspx上加载的这些用户控件的链接

我必须使用不同的用户控件:

用户控制1:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucTest1.ascx.cs" Inherits="ucTest1" %>
<table>
<tr>
    <td>
        <asp:Label ID="Label1" runat="server" Text="TEST 1 ASCX"></asp:Label>
    </td>
</tr>
<tr>
    <td>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </td>
</tr>
</table>

用户控制2:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucTest2.ascx.cs" Inherits="ucTest2" %>
<table>
<tr>
    <td>
        <asp:Label ID="Label2" runat="server" Text="TEST 2 ASCX"></asp:Label>
    </td>
</tr>
<tr>
    <td>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    </td>
</tr>
</table>

这是我的Default.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Master/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="Default" %>
<%@ Register Src="~/ucTest1.ascx" TagName="ucTest1" TagPrefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="Server">
    <uc1:ucTest1 ID="ucTest1" runat="server" />
</asp:Content>

它到目前为止工作正常,但我想在我的母版页上制作这些菜单项,以在同一Default.aspx中的这两个用户控件之间切换。 所以当我点击test1-menuitem时,它会将ucTest1带到我的default.aspx中,当点击test2-menuitem时,我也会将uctest2带入我的default.aspx。

我不知道是否可以这样做。我非常感谢你的帮助!

谢谢!

1 个答案:

答案 0 :(得分:1)

我会使用QueryString来确定要显示的用户控件。例如:

<asp:MenuItem NavigateUrl="~/default.aspx?uc=test" ...>

将用户控件的默认可见性设置为false,并在Page_Load上使用一点逻辑来确定哪个控件应该可见:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        switch (UserControlType)
        {
            case "test":
                ucTest1.Visible = true;
            ...
        }
    }
}

private string UserControlType
{
    get { return Request.QueryString["uc"]; }
}