En hurtig løsning (på kort sigt) er at poste tilbage til den samme form og så aflæse hvilket link der blev klikket på og tage de fornødne forholdsregler (dvs. hvilken kontrol skal vises nu osv.). Dette koncept bliver nok svært at gennemføre, da du nok løber ind i nogle situationer hvor postback til den samme side vil være uhensigtsmæssig. Desuden risikerer du at ende med en stor mainform codebehind hvis du ikke planlægger det godt.
Anyway! Jeg har f.eks. denne mainform (default.aspx):
<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="Sandkassen.CSSPages._default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><HTML lang="en">
<HEAD>
<title>default</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="
http://schemas.microsoft.com/intellisense/ie5"> <link rel="stylesheet" type="text/css" media="screen,projection" href="screen.css">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<div id="page-outer">
<div id="page-inner">
<asp:PlaceHolder ID="phContent" Runat="server" />
</div>
</div>
</form>
</body>
</HTML>
og denne codebehind (default.aspx.cs):
namespace Sandkassen.CSSPages
{
/// <summary>
/// Summary description for _default.
/// </summary>
public class _default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.PlaceHolder phContent;
private void Page_Load(object sender, System.EventArgs e)
{
string mode = Convert.ToString(Request.QueryString["m"]);
switch(mode)
{
case "gal":
Control ctlGal = Page.LoadControl("/Sandkassen/CssPages/gallery.ascx");
if(ctlGal != null)
phContent.Controls.Add(ctlGal);
break;
case "img":
Control ctlImg = Page.LoadControl("/Sandkassen/CssPages/galleryImage.ascx");
if(ctlImg != null)
phContent.Controls.Add(ctlImg);
break;
default:
Control ctlGal2 = Page.LoadControl("/Sandkassen/CssPages/gallery.ascx");
if(ctlGal2 != null)
phContent.Controls.Add(ctlGal2);
break;
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
og så har jeg nogle user controls som ligger i den sti du kan se (der hvor jeg kalder Page.LoadControl).