跳转方法:
1)通过后台传参的跳转: a.通过有回发功能的控件,如asp:LinkButton等
析:
目标页面和原页面可以在2个服务器上,可输入网址或相对路径。后面的bool值为是否停止执行当前页。跳转向新的页面,原窗口被代替。"浏览器中的URL为新路径。:Response.Redirect方法导致浏览器链接到一个指定的URL。
当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。这就是说,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。
示例: 后台:protected void LinkButton1_OnClick(object sender, EventArgs e) { Session["lialiaopihao"] = Label2.Text.ToString(); Response.Redirect("../text2.aspx",true); } 前台:<asp:LinkButton ID="LinkButton1" runat="server" OnClick = "LinkButton1_OnClick">链接至信息查询</asp:LinkButton>
b.通过gridview控件 前台:<Columns>
<asp:BoundField DataField="exp1" HeaderText="exp1" ItemStyle-Width="80px" ReadOnly="true"> <ItemStyle Width="80px" /> </asp:BoundField>
<asp:BoundField DataField="exp2" HeaderText="exp2" ItemStyle-Width="80px" ReadOnly="true"> <ItemStyle Width="80px" /> </asp:BoundField> .... <asp:HyperLinkField DataNavigateUrlFields="exp1,exp2" DataNavigateUrlFormatString="~/ManufacturingManagement/RFID_Manage_Goods1.aspx? aa={0}&bb={1}" HeaderText="绑定" Text="绑定"/></Columns>
c.通过QueryString传值 发送页面:string url = @"http://192.168.1.145/test.aspx?Surveyexp="; string exp = "1"; Response.Redirect(url + exp); 接收界面:string exp = Request.QueryString["exp"] == null ? "" : Request.QueryString["exp"].Tostring();
d.Server.Transfer("test.aspx?name = zhuangsan",true);
目标页面和原页面可以在同一个服务器上。跳转向新的页面,原窗口被代替。默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成Tb310True,就可以保留第一个页面的表单数据和查询字符串。同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查b310. (Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。
e.Server.Executer(""test.aspx?id = three");
目标页面&原页面可以在同一个服务器上。跳转向新的页面,再调回原来的页面。浏览器中的URL为原路径,不会变。当指定跳转的页面控制流程重新返回原发出页Server.Executer调用的位置。这种方式类似于页面的一次函数调用,被调动页面可以访问发出调用页面的额表单数据和查询字符串集合。所以要把被调用页面的Page质量的EnableViewStateMac属性设置为false。
2)不传值
a.<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl = "~/test.aspx">测试 </asp:HyperLink> b.<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="test.aspx">链接至信息查询 </asp:LinkButton>
注:这里不用定义OnClick,若果定义的话,则不会跳转,需在后台的事件 中通过Response.Redirect()进行跳转; c. a元素跳转
<head runat="server"> <script type="text/javascript"> function jump() { window.location.href = "http://www.baidu.com/";
}
</script> </head> <body>
<a href="javascript:" οnclick="fc()">跳转失败</a> <a href="#" οnclick="fc()">跳转成功</a>
</body>
d.Response.Write("<script language = 'javascript'>window.open(tesp.aspx)</script>");
目标页面和原页面,可以在2个服务器上,通过输入相对路径或者网址来实现。原窗口保留,另开一个页面。
e.Response.Write("<script language = 'jaascript'>window.location(test.aspx)</script>");
打开新的页面,原窗体被替换。
f.Response.Write("<scriptlanguage='javascript'>window.showModalDialog('test.aspx')</script>");
g.Response.Write("<script>window.showModelessDialog('Default2.aspx')</script>");
注:showModalDialog 和 showModelessDialog 的区别:
showModalDialog 被打开就一直保持出入焦点,除非对话框被关闭,否则无法切换到主窗口,就类似alert的运行效果。然而,showModelessDialog被打开后则不影响主窗口,焦点可以随意切换,只是窗口是否被挡住而已。若果想要Dialog上的超链接不弹出新的窗口,在新打开的页面内的<html>和<body>之间加入如下代码:<base target = "self">
返回:1)通过以上所属的跳转方法; 如: protected void fanhui_OnClick(object sender, EventArgs e) { Response.Redirect("./test.aspx"); } 2)通过 ViewState 示例:在需要做跳转的每个页面的pageload中加入以下代码
if (!IsPostBack) { if (Request.UrlReferrer != null) { ViewState["UrlReferrer"] = Request.UrlReferrer.ToString(); } } 在后台的事件中加入以下代码: protected void fanhui_OnClick(object sender, EventArgs e) { if(ViewState["UrlReferrer"]!=null) Response.Redirect(ViewState["UrlReferrer"].ToString()); }这样就可以实现页面之间的跳转及返回。