也谈谈Asp.Net中的几种导航方式
关于对导航方式的论述,可以参考:几种页面导航方式
Asp.Net中存在以下几种导航方式:
下面详细说明:
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"]);
}
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
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:
原文中说,HyperLink控件不能执行任何Server端事件,但是上面的代码确实执行了Server端代码。
Response.Redirect():
通过代码实现导航目的,会产生一个Round-Trip过程同用户交互,同时可以通过字符串传递参数,如:
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",
通过测试,WebForm2会显示test,说明读取到了WebForm1.aspx的ViewState。
Server.Execute():
可以在不离开当前页面的同时,执行其他页面。这个方法可以在当前页面中显示其他页面的执行结果。
原文中同样要求把EnableViewStateMac=false,但是测试结果表明,这个选项的值对Execute()的执行没有影响。
通过使用
WebForm2中的事件可以执行,如果是引发Post-back的控件的事件,会清除WebForm1的控件。
Window.Open():
这个方法存在于脚本文件,目的是使用户浏览器新开窗口,只能在客户端执行。
如建立如下Html Button:
可以新开窗口,指向WebForm2.aspx页面。
参考:
Ms Develop Web Application with Microsoft Visual Basic.Net and Microsoft Visual C#.Net
2002
浙公网安备 33010602011771号