Je kunt dat inderdaad met interfaces oplossen door je pagina een interface te laten ondersteunen. In je Page_Load kun je deze interface vervolgens uit je Context.Handler halen. Met zo'n interface kun je dan alle gewenste informatie uit je aanroepende pagina halen.
Dus stel je hebt de volgende interface:
Code:
ITest = interface
function GetClickText: string;
property ClickText: string read GetClickText;
end;
Deze pagina ondersteund deze interface:
Code:
TWebForm1 = class(System.Web.UI.Page, ITest)
{$REGION 'Designer Managed Code'}
strict private
procedure InitializeComponent;
procedure Button1_Click(sender: System.Object; e: System.EventArgs);
procedure Button2_Click(sender: System.Object; e: System.EventArgs);
{$ENDREGION}
strict private
FClickText: string;
procedure Page_Load(sender: System.Object; e: System.EventArgs);
strict protected
Button1: System.Web.UI.WebControls.Button;
Button2: System.Web.UI.WebControls.Button;
procedure OnInit(e: EventArgs); override;
private
function GetClickText: string;
procedure LoadPage2;
public
end;
implementation
{$REGION 'Designer Managed Code'}
/// <summary>
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure TWebForm1.InitializeComponent;
begin
Include(Self.Button1.Click, Self.Button1_Click);
Include(Self.Button2.Click, Self.Button2_Click);
Include(Self.Load, Self.Page_Load);
end;
{$ENDREGION}
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
begin
end;
procedure TWebForm1.OnInit(e: EventArgs);
begin
InitializeComponent;
inherited OnInit(e);
end;
function TWebForm1.GetClickText: string;
begin
Result := FClickText;
end;
procedure TWebForm1.LoadPage2;
begin
Server.Execute('WebForm2.aspx');
end;
procedure TWebForm1.Button2_Click(sender: System.Object; e: System.EventArgs);
begin
FClickText := 'Button2';
LoadPage2;
end;
procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
FClickText := 'Button1';
LoadPage2;
end;
In een volgende pagina wordt er dan gekeken of de aanroepende pagina de interface ondersteund. Is dat het geval dan wordt de informatie via de interface opgehaald:
Code:
procedure TWebForm2.Page_Load(sender: System.Object; e: System.EventArgs);
begin
if Context.Handler is ITest then
ListBox1.Items.Add('Je klikte op ' + ITest(Context.Handler).ClickText);
end;
Dus je ziet: communicatie tussen je pagina's kan op een ERG nette manier worden opgelost.
Bookmarks