confusing Page_Load behavior - asp.net

This is what I'm trying:
public partial class _Default : System.Web.UI.Page
{
String test = "hi ";
protected void Page_Load(object sender, EventArgs e)
{
test = test + test;
Button1.Value = test;
}
protected void Button2_Click(object sender, EventArgs e)
{
Button1.Value = "u're trolled !";
}
protected void Button1_Click(object sender, EventArgs e)
{
}
}
when the page is first loaded it shows "hi hi " as the Button1's value. But whenever I click Button2, it shows "u're trolled !" as Button1's value. My question is if the page is postback every time I click the button and the Page_Load is called, then why does it shows "u're trolled !" instead of appending "hi" ?? Isn't the Page_Load called every time the page reloads ?

Use this code to know which value come when :
String test = "hi ";
protected void Page_Load(object sender, EventArgs e)
{
test = test + test;
Button1.Value += test;
}
protected void Button2_Click(object sender, EventArgs e)
{
Button1.Value += "u're trolled !";
}
protected void Button1_Click(object sender, EventArgs e)
{
}

You need to understand the ASP.NET Page Life Cycle, as Code addict said its the sequence of events that causing the issue for you.
Following link will be very helpful for you.
http://msdn.microsoft.com/en-us/library/ms178472.aspx

Related

asp.net: Create Handles clause for control class

Is there a way that I force all TextBoxes (as an example) .. on an asp.net form, to go through the same routine, during a "postback" event or onchange event?
Here is example code.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
textBox1.TextChanged += new EventHandler(textBox_TextChanged);
textBox2.TextChanged += new EventHandler(textBox_TextChanged);
}
}
protected void textBox_TextChanged(object sender, EventArgs e)
{
}

Events thunderbolt for form itself in the properties window

Properties window asp.net: Just like other controls have that thunderbolt icon, when you select the entire form itself, I don't see a thunderbolt for the page level events.
When you double click on the form, Load is created for you.
But there are other page level events, and I expected to see them and define them, through properties window.
But for the form itself, there is none. See screenshot.
Is this by design? Or am I experiencing an anomaly?
My guess is that maybe the event recognized by the web page through the name of the method itself (Like page load is always Page_Load, etc.)
Click here for screenshot...No Thunderbolt:
Yes, I think this is by design. Only certain event names are recognized.
You can type this in, and it will recognize these event names and do accordingly:
protected void Page_PreInit(object sender, EventArgs e)
{ Response.Write("Page_PreInit" + "<br/>"); }
protected void Page_Init(object sender, EventArgs e)
{ Response.Write("Page_Init" + "<br/>"); }
protected void Page_InitComplete(object sender, EventArgs e)
{ Response.Write("Page_InitComplete" + "<br/>"); }
protected void Page_PreLoad(object sender, EventArgs e)
{ Response.Write("Page_PreLoad" + "<br/>"); }
protected void Page_LoadComplete(object sender, EventArgs e)
{ Response.Write("Page_LoadComplete" + "<br/>"); }
protected void Page_PreRender(object sender, EventArgs e)
{ Response.Write("Page_PreRender" + "<br/>"); }
protected void Page_PreRenderComplete(object sender, EventArgs e)
{ Response.Write("Page_PreRenderComplete" + "<br/>"); }
protected void Page_Unload(object sender, EventArgs e)
{
//Response.Write("Page_Unload" + "<br/>");
}

How to optimize code if ViewState turned off?

protected void Page_Init(object sender, EventArgs e)
{ }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DropDownList1.DataSource = SomeObject.GetData();
DropDownList1.DataBind();
} }
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
var selvalue = DropDownList1.SelectedValue;
DoSomething(selvalue);
}
Please some body help me to make works properly this code if ViewState turned off.
If you turn the viewstate off, then you need to rebind the data on every trip to the server and before the page initializes.
Example of a dropdownlist without viewstate

ASP.NET Profile

I have this:
protected void Page_Load(object sender, EventArgs e)
{
nome_Txt.Text = Profile.dados_pessoais.nome;
}
protected void save_Click(object sender, EventArgs e)
{
Profile.dados_pessoais.nome = nome_Txt.Text;
}
If Profile.dados_pessoais.nome is empty, nome_txt.Text is empty too. When I change nome_Txt.Text to teste for example, when I click on the button nome_Txt.Text is empty.
What am I doing wrong?
The Page_Load event run before the button click event so you always assign the text box to empty value.
To solve this, don't populate the textbox when you are in a Postback:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
nome_Txt.Text = Profile.dados_pessoais.nome;
}
}
As also stated in a comment, you probably have to save the profile after changing it otherwise it won't be saved when you next load the page:
protected void save_Click(object sender, EventArgs e)
{
Profile.dados_pessoais.nome = nome_Txt.Text;
Profile.Save()
}

How to get event in another control event?

In my application, i am trying to get button_click event in another button click event, but it is not working.
My code is,
protected void btn1_Click(object sender, EventArgs e)
{
Response.Write("hi.....");
}
protected void btn2_Click(object sender, EventArgs e)
{
btn1.Click += new EventHandler(this.btn1_Click);
}
What is wrong with this?
I suppose you want to call the code of btn1_click event.
If this is the case, you simple call it as a method in your btn2_Click.
protected void btn2_Click(object sender, EventArgs e)
{
btn1_Click (sender, e);
}

Resources