Search code examples
c#sqlispostback

Fields re-initialized in PageLoad c#


I am perplexed, and maybe I am just familiar with the properties of pageLoad, IsPostBack, or IsCallback. I created a Boolean variable called "first" and set it to True. First time through PageLoad, there is a line of code if first = False, if so, write = true. Then I have a Run_write routine attached to a button, when it runs, if the user response Yes, to the initial question, I make another group of radio buttons visible and set first to false. (i ran this in debug, and I know it hits this line of code) ... so the write to sql is ignored because write == false and the window reappears with the new set of Buttons... Great!

Furthermore, I go through the PageLoad routine again, and it hits the line if (!first), set write to TRUE. my issue is first has been re-set to true? What am I missing? Note, I was able to work around this by utilizing whether the new set of buttons is checked, but I may not want to go this route, and I do want to understand what is going on.

code is below.

namespace MEAU.Web.Components.SupportCenter
{
    public partial class feedback : System.Web.UI.Page
    {
        String login;
        String myurl;
        String response;
        String s_call;
        String p_ship;
        String wrnty;
        Boolean write;
        Boolean first = true;

        protected void Page_Load(object sender, EventArgs e)
        {
            login = Sitecore.Security.Accounts.User.Current.Profile.Email;
            myurl = Request.QueryString["value"];
            s_call = "No";
            p_ship = "No";
            wrnty = "No";
            // Hide the question Buttons
            scall.Visible = false;
            parts.Visible = false;
            wrnt.Visible = false;
            lit.Visible = false;
            write = false;
            if (!first)
                write = true;
        }

        protected void Run_Write(object sender, EventArgs e)
        {
            // Get Reponse
            if (yes.Checked)
            {
                response = "Yes";
                // Display the quesiton buttons, and Hide the NO button
                scall.Visible = true;
                parts.Visible = true;
                wrnt.Visible = true;
                lit.Visible = true;
                no.Visible = false;
                first = false;

                // Did this Prevent a Service call?
                if (scall.Checked)
                {
                    s_call = "Yes";
                    write = true;
                }

                // Did this Prevent a parts shipment?
                if (parts.Checked)
                {
                    p_ship = "Yes";
                    write = true;
                }

                // Is this under warranty?
                if (wrnt.Checked)
                {
                    wrnty = "Yes";
                    write = true;
                }                    
            //   write = true;
            }
            if (no.Checked)
            {
                response = "No";
                write = true;
            }

            if (write == true)
            {
                SqlConnection conn = new SqlConnection(Sitecore.Configuration.Settings.GetConnectionString("feedback"));
                SqlCommand cmd = new SqlCommand("Insert_fb", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@login", login);
                cmd.Parameters.AddWithValue("@url", myurl);
                cmd.Parameters.AddWithValue("@response", response);
                cmd.Parameters.AddWithValue("@dateTime", DateTime.Now);
                cmd.Parameters.AddWithValue("@serviceCall", s_call);
                cmd.Parameters.AddWithValue("@partsShipment", p_ship);
                cmd.Parameters.AddWithValue("@warranty", wrnty);

                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    Response.Write("<script type='text/javascript'>parent.$.fancybox.close();</script>");
                    Response.Write("<script type='text/javascript'>return false;</script>");    
                }
                catch (Exception ex)
                {
                    throw new Exception("Error on file update" + ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}

Solution

  • Every HTTP request to your site creates a new instance of your page class.
    Instance state is not preserved.

    Instead, you need to store the state in session or ViewState, depending on what you want to apply to.