Hi I'm trying to save the values from the request.form after post back. I've tried to use viewstate on the input string but the page_load keeps regenerating the request.form
string TID = null;
Protected void Page_Load(object sender, EventArgs e)
{
if (TID == null)
{
TID= Request.Form ["totalID"];
}
Label1.Text = TID;
}
protected void Button2_Click (object sender, EventArgs e)
{
Label1.Text = TID;
}
Most asp.net controls have a text property, so if yours is a TextBox and you named it textBoxTotalID, then you can just get the value entered using this.textBoxTotalID.Text.
Instead of totalID, use the name of the element not the Id. The name is used for posting information to the server. And also make sure you have specified a name in your view for the element whose value you need on post.
In addition to that, ask yourself this question: Do you need to do that even when the user requests the page or only when the form is submitted? I am sure your answer is only when form is submitted. In that case, do it only when IsPostBack is true.
Try adding a check to the IsPostBack property.
if (IsPostBack)
{
//Set Values here
}
This is set to true when the page is responding to a post back from a form submit or perhaps a control event being fired.
Related
What am I doing wrong here. I can't get ViewState to work:
protected void Page_Init(object sender, EventArgs e)
{
Method1();
}
private void Method1()
{
Element.Click += new EventHandler(Button_Click);
}
public void Button_Click(object sender, EventArgs e)
{
if(ViewState["x"] != null)
// use ViewState["x"] from previous Page Init
//do processing ...
//in the end, store value for future use
ViewState["x"] = myLabel.Text;
}
I am reloading the page, so first the Page Init is triggered, where I do changes, before these changes I read from ViewState previous value of a variable, then I do processing, then override that value for subsequent use (in my next Page Init), after which I override it again.
Problem is my ViewState is null , it doesn't store/remember the value I gave it at the previous page init
Thank you
You can't do that as ViewState is page specific and is actually stored in the HTML of the rendered page. You will need to pass the value via a POST or in the query string or store it in a session or you could cache the value in the asp.net cache which you will be able to access on the other page.
You can use ViewState to transfer data to the same page on Postback.
For setting ViewState:
ViewState["FirstName"] = "SuperMan";
For retrieving ViewState on postback:
string sFirstName = ViewState["FirstName"].ToString();
You can use the Context to Transfer data to the one page to another.
Page1.aspx.cs
this.Context.Items["FirstName"] = "SuperMan";
Page2.aspx.cs
string sFirstName = this.Context.Items["FirstName"].ToString();
You can use the Session variable to preserve the common data which is required almost for every page or across the application for the specific user.
For setting Session:
Session["FirstName"] = "SuperMan";
Applied to your code:
public void Button_Click(object sender, EventArgs e)
{
if (Session["x"] != null)
{
// do processing
// in the end, store value for future use
Session["x"] = myLabel.Text;
}
}
For retrieving Session from any page till the session is valid:
string sFirstName = Session["FirstName"].ToString();
Same way you can use Cookies also, but cookies will be stored on the client.
ViewState just remember value on its page and can't pass value to another page , for use another session state , like Session variable , query string etc
simple use session variable like this
public void Button_Click(object sender, EventArgs e)
{
if(Session["x"] != null)
// use Session["x"] from previous Page Init
//do processing ...
//in the end, store value for future use
Session["x"] = myLabel.Text;
}
I'm wondering what is my issue on passing a variable from page to page using asp.net session.
I've stripped the code down to just one text box to see whats going on. I'm just trying to take the value of a text box and display it on a confirmation page. When the button is clicked it transfers me to the second page but there label is blank. Yes my post back url is pointing to the second page.
Here is the button click:
protected void submit_Click(object sender, EventArgs e)
{
string name = txtFirstName.Text.Trim();
Session["name"] = name;
}
Here is the page load of the second page:
protected void Page_Load(object sender, EventArgs e)
{
lblName.Text = (string)(Session["name"]);
}
Unless I've been looking at this to long and missed something. I've already read "How to: Read Values from Session State" from MSDN.
You say that you've set the PostBackUrl to your second page. If you're going to do it that way, you need to use Page.PreviousPage to get access to your textbox. But this is the easiest way:
Firstly, leave the PostBackUrl alone. Setting the PostBackUrl to your second page means that you're telling the SECOND PAGE to handle your button click, not the first page. Hence, your session variable never gets set, and is null when you try to pull it.
This should work for ya.
And yes, you can also do this with a QueryString, but if its something that you don't want the user to see/edit, then a Session variable is better.
protected void submit_Click(object sender, EventArgs e)
{
string name = txtFirstName.Text.Trim();
Session["name"] = name;
Response.Redirect("PageTwo.aspx");
}
Then in the second page (You don't REALLY need the ToString()):
protected void Page_Load(object sender, EventArgs e)
{
if (Session["name"] != null)
{
lblName.Text = Session["name"].ToString();
}
}
EDIT -- Make sure that your button click actually gets fired. Someone can correct me wrong on this, as I do most of my work in VB.NET, not C#. But if you don't specify the OnClick value, your function won't get called.
<asp:Button ID="Button1" runat="server" Text="Click Me!" OnClick="submit_Click" />
The code you have posted looks fine, so your problem is probably with setup.
Check this link ASP.NET Session State Overview and pay particular attention to the sections on Cookieless SessionIDs and Configuring Session State.
I don't think you added the session. This is how I have done mine.
First Page
protected void btnView_Click(object sender, EventArgs e)
{
foreach (ListItem li in lbxCheckDates.Items)
{
if (li.Selected == true)
{
lblMessage.Text = "";
string checkDate = lbxCheckDates.SelectedItem.Text;
Session.Add("CheckDates", checkDate);
Page.ClientScript.RegisterStartupScript(
this.GetType(), "OpenWindow", "window.open('Paystub.aspx','_newtab');", true);
}
}
}
Second Page
protected void Page_Load(object sender, EventArgs e)
{
string checkDate = (string)(Session["CheckDates"]);
//I use checkDate in sql to populate a report viewer
}
So with yours, I think you need..
protected void submit_Click(object sender, EventArgs e)
{
string name = txtFirstName.Text.Trim();
Session.Add("Name", name);
}
I think what you have in the second page should work, but if it doesn't, add ToString() to it like..
lblName.Text = (string)(Session["name"]).ToString();
Let me know if this helps!
Are you doing a redirect after setting the session variable on the first page, if so you it will not work correctly (unless you know the trick). Checkout this article on making it work. Basically, the way to make this work is to the overload redirect method.
Response.Redirect("~/newpage.aspx", false);
The false parameter prevents .net from terminate processing on the existing page (that actually writes out the session state)
For Second Page
protected void Page_Load(object sender, EventArgs e)
{
if (Session["value"] != null)
{
Label1.Text = Session["value"].ToString();
}
else
{
Label1.Text = "Sorry,Please enter the value ";
}
}
You can use Server.Transfer() instead of Response.Redirect()
For first page, use this:
protected void Button1_Click(object sender, EventArgs e)
{
string value = TextBox1.Text;
Session["value"] = value;
Response.Redirect("~/Sessionpage.aspx");
}
I am trying to keep the selected value in a drop down box after page reloads by creating session but i am not sure if my logic works because the drop down is not keeping the selected value before the refreshed.:
here is what i have:
string txtDDLLocation = ddlLocation.SelectedValue;
Session["MySessionVar"] = txtDDLLocation;
Page.Response.Redirect(Page.Request.Url.ToString(), true);
ddlLocation.SelectedValue = (string)Session["MySessionVar"];
You are calling ddlLocation.SelectedValue = (string)Session["MySessionVar"] after Response.Redirect
Make sure you load the value in page_load event
protected void page_load(object sender, EventArgs e)
{
if(Session["MySessionVar"]!=null)
ddlLocation.SelectedValue = (string)Session["MySessionVar"]
}
Lol setting session after redirect the code wil never reach the session variabele
I have made a page which has a checklist having checkboxes with values. I have a button which should send values to a PostBackUrl page, which is not code behind file, but a postback page, called TestPage.aspx.
Now if i have any text field or list box or checklist group, I want to access its values on that page, which is redirected using PostBackUrl.
In code behind, if i do something like FirstName.Text, i receive its value. Can i get something like that on PostBackedPage?
Thanks
Yes you can - you can access named form / post variables from a page using the Request.Form collection:
protected void Page_Load(object sender, EventArgs e)
{
string firstName = Request.Form["FirstName"];
}
protected void Page_Load(object sender, EventArgs e)
{
TextBox myTxt = (TextBox)Page.PreviousPage.FindControl("previousPageTextBoxName");
currentPageTextBox.text = myTxt.Text;
}
I'm with a problem and want to know if someone can help me.
I'm creating a table with some controls and I want to save all control values in every postback. As the controls are just defined after the page_load, I can't solve my problem this way:
object o;
protected void Page_Load(object sender, EventArgs e)
{
o = createObject();
Create_Table();
if (Page.IsPostBack)
Save_Data();
}
I thought I could execute Save_Data() at the begining of every postback event, but I think that should exist a better way to solve my problem.
Thanks.
Since you want it to be at the page level why not use ViewState? Since o appears to always be set with the same data there probably isn't need to set it more then once, though if you really want to you can remove the if not postback stuff...
protected object o
{
get {
return ViewState["o"];
}
set {
ViewState["o"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack) { o = createObject(); }
Create_Table();
if (Page.IsPostBack)
Save_Data();
}
Your variable 'o' will not contain your original value once the postback is done. This is because each request creates a new page object on the server and your member variable values will be lost. It would be better to use the built in 'Session' property to save your data between requests.
See my answer here