reede, 22. august 2008

ASP.NET automaatne veebilehelt tagasi suunamine

Kui on vaja teha selline asi, et oled ühe veebilehe peal ja pead vahepeal teise veebilehe peal käima, et sealt lehelt mingeid andmeid teada saada ja siis automaatselt samale lehele tagasi tulla koos loetud andmetega saab kasutada järgmist lahendust:

Ehk meil on vaja teha järgmine lähenemine
loginTenant.aspx => EstIdCard.aspx(sellelt lehelt saadud andmed saadame tagasi) => loginTenant.aspx


loginTenant.aspx veebilehel

<%--teeme strongly referenced type EstIdCard.aspx veebilehle, et sealt public properteid lugeda--%>
<%@ PreviousPageType VirtualPath="~/EstIdCard.aspx" %>

<asp:Label ID="Label2" runat="server"></asp:Label>

<%--selle nupu ButtonIDTest vajutus käivitab operatsiooni--%>
<asp:Button ID="ButtonIDTest" runat="server" CausesValidation="False"
Text="ButtonTest" PostBackUrl="~/EstIdCard.aspx" />


loginTenant.cs code-behind
protected void Page_Load(object sender, EventArgs e)
{
if ((Page.PreviousPage != null) && PreviousPage.IsCrossPagePostBack)
{
//saame eelmiselt lehelt andmed kätte
this.Label2.Text += PreviousPage.idcode;
}
else
{
this.Label2.Text = "ei õnnestunud";
}
}

EstIdCard.aspx veebileht, siia kirjutame nüüd jupi javascripti, et teha automaatne tagasisuunamine, kasutame asp:Button PostbackUrl-i et loginTenant.aspx lehel saaksime kindlad olla, et toimub tagasisuunamine.
Siin peab just olemas, see PostBackUrl, et
see osa töötaks: if ((Page.PreviousPage != null) && PreviousPage.IsCrossPagePostBack)
Lihtsalt Response.Redirect kasutada ei saa.

See javascriptis tehtud funktsioon ExecuteClick irriteerib nupu vajutust

<script language="javascript" type="text/javascript">
<!--
function ExecuteClick() {
document.getElementById("<%=ButtonTagasi.ClientID %>").click();
}
-->
</script>
<asp:Button ID="ButtonTagasi" runat="server" CausesValidation="False"
PostBackUrl="~/loginTenant.aspx" Text="Click to continue..." />

EstIdCard.cs

public property, selleks, et saaks andmeid edastada

public string idcode
{
set { this.ViewState["isikukood"] = value; }
get
{
if (this.ViewState["isikukood"] == null)
return "";
else
return this.ViewState["isikukood"].ToString();
}
}


protected void Page_Load(object sender, EventArgs e)
{
idcode = "IDnumbriväärtus"; // väärtustame public propery
//lisame nupule automaatseks tagasisuunamiseks javascripti jupi
this.ButtonTagasi.Attributes.Add("onFocus", "ExecuteClick()");

}

protected void Page_PreRender(object sender, EventArgs e)
{
//siin nüüd sätime nupule fookuse, ehk käivitame varem tehtud funktsiooni Javascriptis ExecuteClick, mis teeb cross-page postbacki tagasi algsele loginTenant.aspx lehele
this.ButtonTagasi.Focus();
}


Blogged with the Flock Browser