Buttonclick and postback issue - c#

Below is a code wherein I want to display a message if there is a postback.
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
Response.Write("Hidden value :" + HiddenField1.Value);
}
}
protected void btn_Click(object sender, EventArgs e)
{
HiddenField1.Value = "test";
}
The issue is I get the message on clicking the button twice, that is clearly because Page_Load happens before btn_Click. Can anyone suggest me a way wherein I can get the message to be displayed in if (Page.IsPostBack) on page postback?
Kindly help

Yep, you're running into a page life cycle issue. Page_Load happens before any postback events.
If you're just doing Response.Write to the resposne stream, you could move this code to the overriden PreRender event on the page.
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (Page.IsPostBack)
{
Response.Write("Hidden value :" + HiddenField1.Value);
}
}

Related

Data not loading on pageload with postback

I am having a problem. Data is not loading once the page loads. I have to choose an item on the dropdown list for it to load. I need it to load even before I choose any item on the drop down list.
This is my code behind.
protected void ddlPeriodStamp_SelectedIndexChanged(object sender, System.EventArgs e)
{
string selectedGroup = string.Empty;
DropDownList ddlItemGroup = (DropDownList)sender;
if (ddlItemGroup.SelectedValue != null)
TreatmentGroup = ddlItemGroup.SelectedValue;
ApplyGridFilter(ddlItemGroup.SelectedValue);
}
protected void ApplyGridFilter(string TreatmentGroup)
{
string selectedGroup = string.Empty;
DBDataSource1.State.BusinessObject.DataPump.FormFilters.Clear();
DBDataSource1.State.BusinessObject.DataPump.FormFilters.Add("TreatmentGroup", TreatmentGroup);
DBDataSource1.State.BusinessObject.Fill(null);
MedicalSchemeDetailGrid.DataBind();
}
protected void Page_LoadComplete(object sender, System.EventArgs e)
{
if (!this.IsPostBack)
ApplyGridFilter(string.Empty);
}
Call ApplyGridFilter(string.Empty); while ispostBack is false and call ApplyGridFilter(ddlItemGroup.SelectedValue); while ispostBack is true
protected void Page_LoadComplete(object sender, System.EventArgs e)
{
if (this.IsPostBack)
{
ApplyGridFilter(ddlItemGroup.SelectedValue);// it will hit on first time page load
}
else
{
ApplyGridFilter(string.Empty);// it will hit while you change the dropdown items, But you should set true for **IsAutoPostBack** property on dropsownlist.
}
}
You need to fill your data in Page_Load event not in Page_LoadComplete event. According to MSDN:
The LoadComplete event occurs after all postback data and view-state
data is loaded into the page and after the OnLoad method has been
called for all controls on the page.
protected void Page_Load(object sender, System.EventArgs e)
{
if (!this.IsPostBack)
ApplyGridFilter(string.Empty);
}

ViewState value not being retained during postback

How can I make this piece of code work? I am dealing with a bigger issue but if I can make this work then I will know what to do.
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Response.Write(ViewState["Value"].ToString());
}
}
protected void Button1_Click(object sender, EventArgs e)
{
ViewState["Value"] = "Button clicked";
}
Page_Load event happens before Button1_Click and hence you wont be able to access a value that is not already set.
You will need to use an event that happens after Button1_Click like Page_PreRender as you have used in the answer.
Please go through this link to understand Page Life Cycle, which is invaluable in Asp.Net Webforms development.
I was able to solve my problem by putting my logic in pageLoad method in the page_PreRender method like this:
protected void Page_PreRender(object sender,EventArgs e)
{
if (IsPostBack)
{
Response.Write(ViewState["Value"].ToString());
}
}

C# how to stop a control's event

I have an .aspx page that has a page_load as follows:
protected void Page_Load(object sender, EventArgs e)
{
if (HttpContext.Current.User.Identity.Name != "")
{
....
}
else
{
FormsAuthentication.RedirectToLoginPage();
return;
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
....
}
The issue I am noticing is that when the user clicks the submit button it goes though the Page_Load (goes though the else) and then tries to run though the protected void btnSubmit_Click(object sender, EventArgs e).
Is there a way to make it redirect to the login page and not continue to the next void?
This is NOT an issue. This is the normal ASP.NET Page Life Cycle.
Controls events fire right after the Page_Load event.
Note that the FormsAuthentication.RedirectToLoginPage method does not end the request by calling HttpResponse.End. This means that code that follows the RedirectToLoginPage method call will run.
Assuming you want to stop further processing from within the Page_Load (which I believe is your intention with return):
protected void Page_Load(Object sender, EventArgs e)
{
if (/*I want to kill processing*/)
{
// Method one:
Response.End(); // Though admittedly ugly
// Method two:
this.Context.ApplicationInstance.CompleteRequest();
return; // return as normal (short-circuit)
}
}

How to show login saved in cookie in Page_load event?

I need save login of my Login page in cookie for show every time when page is loaded
I have create for save login in cookie, in Button click event. but, because in the Post Back, Page_Load before button, so when page_load put cookie information in the TextBox, my cookie is empty
What can I do for resolve this?
protected void Page_Load(object sender, EventArgs e)
{
// This time, Cookies["login"].Value is empty
tbLogin.Text = Response.Cookies["login"].Value;
}
protected void Button1_Click1(object sender, EventArgs e)
{
Response.Cookies.Add(new HttpCookie("login", tbLogin.Text));
}
Try using Page.IsPostBack property.
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
tbLogin.Text = Response.Cookies["login"].Value;
}
}
protected void Button1_Click1(object sender, EventArgs e)
{
Response.Cookies.Add(new HttpCookie("login", tbLogin.Text));
}

onclick second click

New to asp.net, I am having a problem on a website I am creating, I am using a master page to build my pages. I am trying to change the css class of a li tag using the onclick event in linkbuttons:
<asp:LinkButton runat="server" id="AboutButton" OnClick="about_click" PostBackUrl="about.aspx"><span>About</span></asp:LinkButton>
This linkbutton calls a function in the master page's code behind:
protected void about_click(object sender, EventArgs e)
{
if(Page.IsPostBack)
{
about.Attributes.Add`enter code here`("class", "current");
}
}
This only works when the page is loaded and the button is clicked again. Any help would be greatly appreciated.
By adding: if(Page.IsPostBack) you're specifically telling it not to execute that code the first time the page is loaded, but you want it to happen when the page is first loaded, by the sounds of the question.
Why did you add if(Page.IsPostBack). Try this
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
about.Attributes.Add("class", "current"); //initial setting here
}
}
protected void about_click(object sender, EventArgs e)
{
about.Attributes.Add("class", "current");
}

Categories