我的结构是这样的: 母版页 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。
我不知道是否可以这样做。我非常感谢你的帮助!
谢谢!
答案 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"]; }
}