Prije svega jedna mala digresija (izvini sto ovo spominjem): Button ne zove Page_Load() nego je taj poziv u sklopu page lifecycle-a, ali ne bitno.
Ako radis upis u bazu iz kontrole direktno, nije mi jasno zasto , ali dobro.
Ovo trebao implementirati preko delegata (propagiranjem eventa).
Scenario:
Recimo da na napravis WebUserControl-u koja ima textbox i dugme.
Tu kontrolu dodas na neku stranicu koja ima jedan textbox.
Zahtjev: da se na klik dugmeta unutar WebUserControl-e vrijednost iz textbox-a u WebUserControl-i prekopira u textbox na stranici kojoj si dodao ovu kontrolu.
CODE:
----------------------------
WebUserControl
- ASP .NET:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="TestDataList.WebUserControl1" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="SClickHandler"
Text="Button" />
- CODE BEHIND:
public partial class WebUserControl1 : System.Web.UI.UserControl
{
public delegate void ButtonClickHandler(object sender, EventArgs e);//definises delegata cijeg ce tipa biti event
public event ButtonClickHandler buttonClick;//definises event koji ces podici
public TextBox txb;//ovaj objekat TextBox koristim da bi mogao da pristup ovom textboxu izvan kontrole
protected void Page_Load(object sender, EventArgs e)
{
txb = this.TextBox1;//ovim omogucavas pristup textboxu izvan kontrole
}
protected void SClickHandler(object sender, EventArgs e)
{
this.buttonClick(sender, e);//propagiranje event-a do stranice na koju si importovao ovu kontrolu
//DIO TVOG KODA - UPIS U BAZU (Ako to radis direktno iz ove kontrole)
}
}
-------------------------
Default.aspx - strinica u koju si ucitao kontrolu
- ASP .NET:
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</div>
</form>
</body>
</html>
- CODE BEHIND:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Init()
{
}
public WebUserControl1 webCont;
protected void Page_Load(object sender, EventArgs e)
{
webCont = (WebUserControl1)Page.LoadControl("WebUserControl1.ascx");//load-ujes kontrolu i smjestas je u webCont objekat da bi imao pristup njegovim atributima
webCont.buttonClick += new TestDataList.WebUserControl1.ButtonClickHandler(this.ControlButtonClickHandler);//assign-as event handler za event button click koji smo napravili u WebUserControl1 klasi
this.form1.Controls.Add(webCont);// dodajes kontrolu u formu
}
protected void ControlButtonClickHandler(object sender, EventArgs e)
{
TextBox1.Text = webCont.txb.Text; //ovdje se string iz textboxa unutar kontrole kopira u string textboxa unutar default stranice - sto bi trebao biti odgovor na tvoje pitanje
//TVOJ KOD OBRADE klika - (recimo UPIS u BAzu)
}
}
U ovom slucaju vrijednost iz textbox-a ostane bez cuvanja i ponovnog setovanja, bar kod mene :) - PROVJERENO.
Ako dodavanje stavis u if(!IsPostBack) nece uopste dodati kontrola, jer svaki klik na button radi postback, a to rezultuje da nece proci ovaj uslov!
Nadam se da je bilo od pomoci.