分享

asp.net框架内进行页面跳转的问题

 行走在理想边缘 2019-08-21

在Asp.NET使用框架页面的时候,常常在框架内部页面中进行跳转,但是我们常常也会遇到这样的一种情况:即我们需要跳转的不只是部分框架的页面,而是将整个主页面进行跳转,比如在框架左侧页面中操作的时候,需要跳转到登陆页面等等。

这种情况下的跳转其实跟HTML中进行主框架的跳转是一样的,在早期使用HTML的时候,我们使用Javascript,在Asp.net中,后台代码可以为:

Response.Write("<script>parent.location='login.apsx';</script>");
Response.Write("<script>top.location='login.apsx';</script>");
Response.Write("<script>parent.document.location.href='login.apsx';</script>");

如果点击的按钮是在框架中嵌套的框架中,那如果只是用上面的语句,只能将第一层框架进行完全跳转,而外层的还保持不变,这时就需要这样了。

Response.Write("<script>parent.parent.location='../main.aspx';</script>");

Response.Write("<script>top.location='login.apsx';</script>");

后记

top属性
每一个WINDOW对象,不论他是常规HTML页面。框架集页面。子框架还是孙子框架,都具有一个TOP属性。这个属性返回对载入浏览器得最顶层WINDOE对象得引用;

。如果WINDOW对象是常规HTML页面,TOP就是SELF
。。。。。。。。。。。顶层框架及页面, 。。。。。。。。
。。。。。。。。。。。子框架,TOP指向框架得父亲,也就是说,下面两个表达式是等效的;
SELF.TOP
SELF.PARENT
。如果WINDOW对象是自框架,TOP指向框架得祖父。也就是说下面两个表达式是等效得
self.top
self.parent.parent
这可能提醒了你一个减少按键得好方法,尤其是当你认为能为能仅适用TOP本身是(那就是说,使用TOP本身来代替SELF.TOP或者WINDOW.TOP),这虽是可行的,但是应该特别注意:必须确保TOP真正指向你的顶层框架

那当我们不仅需要转移框架页面,还需要传递参数,那么传参跳转的语句显然既可以使用QueryString在跳转的URL后面加“?XX='XXXXX'”即可,也可以使用Session来实现。

问题解决了,我们来引申一下:

如果我们要跳转的不是主框架页面了,而是右边甚至于是框架中的任意一个页面,那么该如何呢?

答案其实也很简单,我们再来仔细研究下我们上面列出来的三条跳转语句,都是使用的获取Documnet中的父层的框架对象,然后进行跳转,那我们其实只要使用我们熟悉的Javascript获取到相应的要跳转的框架对象进行跳转,至于传参嘛,那就跟上面是完全一样了哦!
我们来看下示例:

Response.Write"<script language='javascript'>window.location='left.aspx';parent.rightframeName.location='right.aspx'</script>");

实现跳转了吗?是的,恭喜了,但是这样OK了吗?还没有...
我们发现,这样进行跳转的时候,左边的框架确实是跳转了,但是右边的框架也随即跟着刷新了,右边页面中所作的一些改动也都被重置掉了,这可不是我们想要的结果,那么怎么办?再往下看:
我们都知道,在HTML时代是不存在这个问题的,为什么呢?嘿嘿,因为那是HTML控件,使用的JavaScript客户端代码,因此它不会回发服务器,那么我们是不是可以也使用HTML控件,然后再在它的onclick时间中实现呢? 当然是可以的,你不要跟我说你用的是服务端控件,你要在后台代码里实现哦,在LOAD时间里AddAttributes方法添加一个onclick事件就OK了的。
我在网上赚了一圈,还发现一个牛人提出来的方法,看完之后不得不提一下HTML中的target ,具体内容?白度上自己摆一把去~
我这里就把牛人的方案照搬过来了阿:

假设左框架为 frmLeft,右框架为 frmRight

<frame name="frmLeft" src="left.aspx">
<frame name="frmRight" src="right.aspx">

关于左右框架间的数值传递有几种方法:

第一种:不提交服务器,在客户端实现

left.aspx 中的代码

<INPUT οnclick="HandToRight()" id="Button1" value="Button" name="Button1">
<script language=javascript>
<!--
function HandToRight()
{
var para = document.getElementByIdx_xx_x_x_x("TextBox1").value;
window.parent.frmRight.location.replace("right.aspx?p="+para);
}
//-->
</script>

此方法通过 URL 传参数,不安全


第二种,用 POST 的方法,left.aspx 的代码,注意 form 的 target

<form id="Form1" method="post" runat="server" target ="frmRight">

编写提交按钮事件
Session["ID"]=TextBox1.Text;
Response.Redirect ("right.aspx");

此方法较安全,但多一个往返 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多