也談談Asp.Net中的幾種導航方式

來源:互聯網
上載者:User
關於對導航方式的論述,可以參考:幾種頁面導航方式
Asp.Net中存在以下幾種導航方式:
導航方法 用途
HyperLink Server控制項 導航到另一個頁面
Response.Redirect() 使用代碼導航到另一個頁面。功能同HyperLink相同
Server.Transfer() 結束本頁面,執行另一個頁面。只對.aspx頁面有效
Server.Execute() 保留顯示本頁面內容的同時,執行其他頁面,2個頁面的顯示資訊會顯示在一起。只對.aspx頁面有效
Window.Open() 在用戶端新開一個頁面

下面詳細說明:
HyperLink 控制項:
接收使用者滑鼠的點擊事件,導航到HyperLink.NavigateUrl屬性設定的頁面。基本用途就是導航,自身也帶有Load,UnLoad,Init,PreRender事件,執行特定的操作。
如在一個頁面的HyperLink控制項的Unload事件中定義Application變數name:     private void HyperLink1_Unload(object sender, System.EventArgs e)
        {
            Application["name"]="Pierce";
        }

然後在導航頁面中讀取此變數:     private void Page_Load(object sender, System.EventArgs e)
        {

            Response.Write(Application["name"]);        
            
            
        }

原文中說,HyperLink控制項不能執行任何Server端事件,但是上面的代碼確實執行了Server端代碼。

Response.Redirect():

通過代碼實現導航目的,會產生一個Round-Trip過程同使用者互動,同時可以通過字串傳遞參數,如:

private void LinkButton1_Click(object sender, System.EventArgs e)
{
// Display next page.
Response.Redirect("NextPage.aspx?name=pierce");
}

Server.Transfer():
同HyperLink和Response.Redirect()相似,不同在於:
Server.Transfer()可以在從源頁面到目標頁面的傳遞過程中,保留源頁面的一些資訊。將Transfer()的第2個參數設為True,可以使源頁面的ViewState,QueryString,甚至過程資訊在目標頁面可以保留。
原文說:如過使用這項功能,需要把頁面的EnableViewStateMac值設為False,即不執行Hash操作。預設狀況下,Asp.Net 會把ViewState的值作Hash處理,只有把EnableViewState=False,關閉此Hash功能,才可以使後續頁面讀取ViewState的資訊。但是經過測試,將EnableViewState=true,對於讀取ViewState的資訊沒有影響。ViewState中的字元預設會被編碼為Base64格式的,雖然不易讀,但是沒有加密。在machine.config中可以控制加密方式,加密操作需要在Machine層完成,比較消耗系統資源。 如果根據machineKey執行加密,那麼就不可以直接讀取ViewState的值。
例子:
建立立頁面WebForm1.aspx,加入TextBox控制項,名稱為tb,加入Button控制項,名稱Button1,tb.Text="test", private void Button1_Click(object sender, System.EventArgs e)
        {        
            Server.Transfer("WebForm2.aspx",true);
}

建立WebForm2.aspx,     private void Page_Load(object sender, System.EventArgs e)
        {        
            System.Collections.Specialized.NameValueCollection col=Request.Form;
            Response.Write(col["tb"]);            
            
        }

通過測試,WebForm2會顯示test,說明讀取到了WebForm1.aspx的ViewState。

Server.Execute():
可以在不離開當前頁面的同時,執行其他頁面。這個方法可以在當前頁面中顯示其他頁面的執行結果。
原文中同樣要求把EnableViewStateMac=false,但是測試結果表明,這個選項的值對Execute()的執行沒有影響。
通過使用

System.IO.StringWriter writer=new System.IO.StringWriter();
            Server.Execute("WebForm2.aspx",writer);
            Response.Write(writer.ToString());

WebForm1會顯示WebForm2的各種控制項和執行結果。
WebForm2中的事件可以執行,如果是引發Post-back的控制項的事件,會清除WebForm1的控制項。

Window.Open():
這個方法存在於指令檔,目的是使使用者瀏覽器新開視窗,只能在用戶端執行。
如建立如下Html Button: <INPUT style="Z-INDEX:
102; LEFT: 55px; WIDTH: 81px; POSITION: absolute; TOP: 156px; HEIGHT:
24px" onclick="window.open('webform2.aspx')" type="submit"
value="New Window">

可以新開視窗,指向WebForm2.aspx頁面。

參考:
Ms Develop Web Application with Microsoft Visual Basic.Net  and Microsoft Visual C#.Net 
2002

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.