[ASP.net] ViewState生命週期只存活在postback

[ASP.net] ViewState生命週期只存活在postback

幾年前在補習班上課,聽老師講ViewState生命週期活在一個頁面,超連結和postback到自己頁面後,ViewState還是存活的

今天就來推翻這套理論

 

一開始的畫面

001

三個控制項、一個<a>超連結

C# Code


protected void Page_Load(object sender, EventArgs e)
    {

    }

    //建立ViewState
    protected void btn_Go_Click(object sender, EventArgs e)
    {
        ViewState["Hello"] = "Hello World!!";
    }
    //讀取ViewState
    protected void btn_readViewState_Click(object sender, EventArgs e)
    {
        btn_readViewState.Text = (string)ViewState["Hello"];
    }
    //重新導向(Get Method)
    protected void btn_Redirect_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/testShadow.aspx");
    }

先建立ViewState後,再讀取ViewState裡的字串

002

Postback證明ViewState還在

接著回到一開始的畫面

001

測試超連結Get Method

003

 

ViewState經過Get Method後就消失了

 

這種基本常識還需要PO上來?

其實是想紀錄一下,最近遇到的一個小技巧

如果有開發過填寫表單畫面的話,例如以下

004

清除重填,一般人可能會習慣寫在Javascript裡的funciton

並用document.getElementById('<%= WebControl1.ClientID %>').value = "";

來做清除文字動作

如果客戶是優柔寡斷型,TextBox一直加加減減

這時如果再用document.getElementById('<%= WebControl1.ClientID %>').value = "";方式的話

就得寫比較多行較辛苦

這時建議直接把「清除重填」弄成ImageButton

然後Click事件


       //重新導向到本頁,網頁上TextBox的ViewState都消失
        Response.Redirect("自己的頁面.aspx");