在buttonclick上存储文本框中的字符串,以便在页面重新加载时使用该变量

时间:2016-04-14 19:43:45

标签: c# asp.net viewstate

如何在buttonclick上存储文本框输入,以便页面重新加载可以使用这些值来重新创建一些内容? 我已经尝试过使用viewState但是在使用断点时它总是在page_load上说null。

按钮点击:

protected void LoadLifeLineBtn_Click(object sender, EventArgs e)
{
    ViewState["lifelineID"] = Convert.ToInt32(TextBox1.Text);
    ViewState["phaseid"] = Convert.ToInt32(TextBox2.Text);
    this.Page_Load();
}

继承我的page_load

int lifelineid;
int phaseid;

protected void Page_Load(object sender, EventArgs e)
{
    hideAndShow();
    if (!IsPostBack)
    {
        lifelineid = 22222;
        phaseid = 1;
        FillFaseTable(PhaseMainTable, phaseid, lifelineid);
        PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor";
    }
    else if (IsPostBack)
    {
        if (ViewState["lifelineid"] != null) 
        {
            lifelineid = (int)ViewState["lifelineid"];
        }
        if (ViewState["phaseid"] != null) 
        {
            phaseid = (int)ViewState["phaseid"];
        }
        FillFaseTable(PhaseMainTable, phaseid, lifelineid);
        PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor";
    }
}

2 个答案:

答案 0 :(得分:0)

假设您的按钮已连接到此事件

<asp:Button ID="LoadLifeLineBtn" runat="server" OnClick="LoadLifeLineBtn_Click"></asp:Button>

你应该能够稍微改变一下,以便在代码中获得更顺畅的流程。

protected void LoadLifeLineBtn_Click(object sender, EventArgs e)
{
    hideAndShow();

    int lifelineID = Convert.ToInt32(TextBox1.Text);
    int phaseid = Convert.ToInt32(TextBox2.Text);

    FillFaseTable(PhaseMainTable, phaseid, lifelineid);
    PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor";
}

现在重新组织您的Page_Load事件以处理页面最初加载的时间

protected void Page_Load(object sender, EventArgs e)
{
    hideAndShow();
    if (!IsPostBack)
    {
        lifelineid = 22222;
        phaseid = 1;
        FillFaseTable(PhaseMainTable, phaseid, lifelineid);
        PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor";
    }
}

原因是当LoadLifeLineBtn_Click触发时,您可以在此时执行所需操作,而不是直接调用Page_Load事件。

答案 1 :(得分:0)

我正在添加第二个答案,以帮助您解释当您点击LoadLifeLineBtn按钮时代码中发生的一些事情。

当您点击LoadLifeLineBtn时,它会触发LoadLifeLineBtn_Click事件,该事件将创建 PostBack ,输入TextBox1TextBox2的值将会已成为ViewState

的一部分

在您的代码中,您可以将其更改为此代码,并且可以按照您的意图继续操作,而无需手动设置ViewState

protected void Page_Load(object sender, EventArgs e)
{
    int lifelineid;
    int phaseid;

    hideAndShow();
    if (!IsPostBack)
    {
        lifelineid = 22222;
        phaseid = 1;
    }
    else
    {
        lifelineID = Convert.ToInt32(TextBox1.Text);
        phaseid = Convert.ToInt32(TextBox2.Text);
    }

    FillFaseTable(PhaseMainTable, phaseid, lifelineid);
    PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor";
}