使用QueryString
使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下:
1,使用控件创建web表单(form)
2,创建可以返回表单的按钮和链接按钮
3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量
4,在保存的URL里添加QueryString参数
5,使用Response.Redirect重定向到上面保存的URL
下面的代码片断演示了如何实现这个方法:
  源页面代码:
private void Button1_Click
(object sender, System.EventArgs e)
{
 string url;
 url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;
 Response.Redirect(url);
}
 目标页面代码:
 private void Page_Load
(object sender, System.EventArgs e)
{
 Label1.Text=Request.QueryString["name"];
 Label2.Text=Request.QueryString["email"];
}

使用Session变量
  使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下:
1,在页面里添加必要的控件
2,创建可以返回表单的按钮和链接按钮
3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里
4,使用Response.Redirect方法重定向到另一个页面
5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它
下面的代码片断演示了如何实现这个方法:
   源页面代码:
private void Button1_Click
(object sender, System.EventArgs e)
{
 //textbox1 and textbox2 are webform
 //controls
 Session["name"]=TextBox1.Text;
 Session["email"]=TextBox2.Text;
 Server.Transfer("anotherwebform.aspx");
}
  目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
 Label1.Text=Session["name"].ToString();
 Label2.Text=Session["email"].ToString();
 Session.Remove("name");
 Session.Remove("email");
}

使用Server.Transfer
  这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:
1,在页面里添加必要的控件
2,创建返回值的Get属性过程
3,创建可以返回表单的按钮和链接按钮
4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面
5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了
以下代码综合实现上述步骤过程的代码:
  源页面代码:
    把以下的代码添加到页面中
   public string Name
{
 get
 {
 return TextBox1.Text;
 }
}

public string EMail
{
 get
 {
 return TextBox2.Text;
 }
}
  然后调用Server.Transfer方法
private void Button1_Click
(object sender, System.EventArgs e)
{
 Server.Transfer("anotherwebform.aspx");
}
   目标页面代码:

在anotherwebform.aspx中务必在第一句话添加

<%@ Reference Page="~/GCSetting.aspx" %>

然后在anotherwebform.aspx.cs中添加如下。

private void Page_Load
(object sender, System.EventArgs e)
{
 //create instance of source web form
 WebForm1 wf1;
 //get reference to current handler instance
 wf1=(WebForm1)Context.Handler;
 Label1.Text=wf1.Name;
 Label2.Text=wf1.EMail;
}

//

子窗口和父窗口交互
最近项目开发中需要子窗口和父窗口交互的内容,基本上无非就是把子窗口的信息传递给父窗口,并且关闭自己等等,或者是父窗口把自己的信息传递给子窗口等等。

1。父窗口传递信息给子窗口

看代码实例:
<script language=javascript>

function outPut()
{
 //获取父窗口的文本信息赋值给text
 var text = document.abc.text.value;
 //打开子窗口,并且把操作句柄赋值给win变量,以下所有操作都是针对win对象的
 var win = window.open("","mywin", "menubar=no,width=400,height=100,resizeable=yes");
 //输出基本信息
 win.document.writeln("<title>输出结果</title>");
 win.document.writeln("你的信息是:<p>");
 //输出从父窗口获取的信息
 win.document.writeln(text);
 win.document.close();
 win.focus();
}
</script>

<form name=abc method=post>
<input type=text name=text size=50>
//调用上面的函数
<input type=button value=提交 onClick="outPut()">

</form>


2。子窗口传递参数给父窗口

我们对上面的代码进行改造:

<script language=javascript>

function outPut()
{
 var text = document.abc.text.value;
 var win = window.open("","mywin", "menubar=no,width=400,height=100,resizeable=yes");
 win.document.writeln("<title>输出结果</title>");
 win.document.writeln("你的信息是:<p>");
 win.document.writeln(text);
 win.document.writeln("<input type=text name=child value=子窗口信息>");

 //对子窗口本身操作,使用self对象,对父窗口操作使用opener对象,这是关键
 //把子窗口中表单的值回传给父窗口,取代父窗口表单以前的值,然后关闭子窗口
 win.document.writeln("<input type=button value=关闭自己 onClick=''window.opener.abc.text.value=self.child.value;self.close()''>");
 //可以控制关闭父窗口
 win.document.writeln("<input type=button value=关闭父窗口 onClick=''window.opener.opener=null;window.opener.close()''>");
 //刷新父窗口
 win.document.writeln("<input type=button value=刷新父窗口 onClick=''window.opener.location.reload()''>");

 win.document.close();
 win.focus();
}
</script>

<form name=abc method=post>
<input type=text name=text size=50>
<input type=button value=提交 onClick="outPut()">

</form>


3。不是同页面的子窗口和父窗口交互

假设我们涉及到外部程序,比如php、asp等等,那么我们处理的可能是两个页面,比如,上传功能,我们就是需要打开一个新页面,然后再把新页面中的值传递给父页面。

局部代码实例:

<input type="input" value="" name="input_tag" id = "input_tag" onKeyUp="clearPreTagStyle()" size="40">
<input type="hidden" value="0" name="tagid" id="tagid">
<input type="button" value="标签" onclick="popUpWindow(''tag.php?tag=''+escape(document.tryst_form.input_tag.value))">

以上是父窗口的部分代码,里面的popUpWindow是封装好的window.open函数,所以理解面面的tag.php是另外一个页面就可以,我们需要把当前表单中的值提交给tag.php页面去处理。


tag.php部分代码:

查询标签结果:
<a href="#" name="tag_1">生活</a><a href="#" onclick="opener.document.tryst_form.input_tag.value = document.tag_1.innerHTML">加入该标签</a>

<a href="#" name="tag_2">生活秀</a><a href="#" onclick="opener.document.tryst_form.input_tag.value = document.tag_2.innerHTML">加入该标签</a>

这个就是我们的子窗口,我们要把tag_1和tag_2返回到子窗口中,虽然他们不是同一个页面。这里有个知识点,就是我们如何获取连接中的值,我们使用innerHTML属性:document.tag_2.innerHTML 这个就是我们获取了tag_2的值“生活秀”,我们也能使用其他方法获取,比如:document.all.tag_2.innerHTML,或者this.innerHTML就是指本身的链接的值。

访问父窗口也是使用opener对象来处理:opener.document.tryst_form.input_tag.value,就能够改变父窗口的值。

1. 在Asp.net实用技巧(1) 中提到了如何刷新父页面,那么如果要刷新父页面的父页面的父页面了?那就是刷新祖先页面RefreshAncestorPage。

RefreshAncestorPageRefreshAncestorPage#region RefreshAncestorPage
        /**//**//**//// <summary>
        /// 刷新指定的祖先页面,注意是"祖先页面"    
        /// </summary>        
        public static void RefreshAncestorPage(HttpResponse Response ,string targetPageTitle ,bool isCloseCurPage)//targetPageTitle 目标页面的title
        {            
            StringBuilder scriptString = new StringBuilder();
            scriptString.Append("<script language = javascript>");
            scriptString.Append("var p = window ;");
            scriptString.Append(string.Format("while(p.document.title != ''{0}'')" ,targetPageTitle));
            scriptString.Append("{");            
            scriptString.Append("p = p.opener ;");
            scriptString.Append("}");            
            scriptString.Append("p.focus();");
            scriptString.Append("p.refresh();");

            if (isCloseCurPage )
            {
                scriptString.Append( " window.focus();" );
                scriptString.Append( " window.opener=null;" );
                scriptString.Append( " window.close(); " );
            }            

            scriptString.Append("</"+"script>");

            Response.Write(scriptString.ToString());
        }

        /**//**//**//*
         需要在Father页面的html中添加如下脚本(在Header中):
         <script language="javascript">
        function refresh()
        {
            this.location = this.location;
        }
        </script>
         */        
        #endregion
2.如何刷新祖先页面中的某个frame中的page了?

RefreshFrameInAncestorPageRefreshFrameInAncestorPage#region RefreshFrameInAncestorPage
        /**//**//**//// <summary>
        /// 刷新指定的祖先页面中的某个框架的内部页面
        /// </summary>        
        public static void RefreshFrameInAncestorPage(HttpResponse Response ,string ancestorTitle ,string frameName ,string targetUrl ,bool isCloseCurPage)//targetPageTitle 目标页面的title
        {            
            StringBuilder scriptString = new StringBuilder();
            scriptString.Append("<script language = javascript>");
            scriptString.Append("var p = window ;");
            scriptString.Append(string.Format("while(p.document.title != ''{0}'')" ,ancestorTitle));
            scriptString.Append("{");            
            scriptString.Append("p = p.opener ;");
            scriptString.Append("}");            
            scriptString.Append("p.focus();");
            scriptString.Append(string.Format("p.{0}.location = ''{1}'';" ,frameName, targetUrl));

            if (isCloseCurPage )
            {
                scriptString.Append( " window.focus();" );
                scriptString.Append( " window.opener=null;" );
                scriptString.Append( " window.close(); " );
            }            

            scriptString.Append("</"+"script>");

            Response.Write(scriptString.ToString());
        }        
        #endregion
3.如何刷新本页面中的其它框架了?

RefreshTargetFrameInSamePageRefreshTargetFrameInSamePage#region RefreshTargetFrameInSamePage
        /**//**//**//// <summary>
        /// 从某一框架刷新同一页面中的任意一框架(包括自己所处的框架)
        /// </summary>        
        public static void RefreshTargetFrameInSamePage(HttpResponse Response ,string frameName ,string targetUrl)
        {                
            string scripStr = string.Format("<script language =''javascript''> window.parent.{0}.location= ''" ,frameName) +targetUrl + "''";
            scripStr += "</"+"script>" ;            
            Response.Write(scripStr) ;
        }
        #endregion 

4.如何调用祖先页面的脚本?

CallAncestorScriptMethodCallAncestorScriptMethod#region CallAncestorScriptMethod
        /**//**//**//// <summary>
        /// 调用祖先页面中的某个框架内部page的脚本 ,如果是调用祖先页面的脚本,targetFrameName传入null
        /// </summary>        
        public static void CallAncestorScriptMethod(HttpResponse Response ,string targetPageTitle ,string targetFrameName ,string methodName ,string[] paraStrs)
        {
            StringBuilder scriptString = new StringBuilder();
            scriptString.Append("<script language = javascript>");
            scriptString.Append("var p = window ;");
            scriptString.Append(string.Format("while(p.document.title != ''{0}'')" ,targetPageTitle));
            scriptString.Append("{");            
            scriptString.Append("p = p.opener ;");
            scriptString.Append("}");    
            if(targetFrameName != null)
            {
                if(paraStrs == null)
                {
                    scriptString.Append(string.Format("p.frames[''{0}''].{1}() ;" ,targetFrameName ,methodName ));
                }
                else
                {
                    string rParaStr = string.Format("''{0}''" ,paraStrs[0]) ;
                    for(int i=1 ;i<paraStrs.Length ;i++)
                    {
                        rParaStr += string.Format(", ''{0}''" ,paraStrs[i]) ;
                    }
                    scriptString.Append(string.Format("p.frames[''{0}''].{1}({2}) ;" ,targetFrameName ,methodName ,rParaStr));    
                }
            }
            else
            {
                if(paraStrs == null)
                {
                    scriptString.Append(string.Format("p.{0}() ;" ,methodName ));    
                }
                else
                {
                    string rParaStr = string.Format("''{0}''" ,paraStrs[0]) ;
                    for(int i=1 ;i<paraStrs.Length ;i++)
                    {
                        rParaStr += string.Format(", ''{0}''" ,paraStrs[i]) ;
                    }
                    scriptString.Append(string.Format("p.{0}({1}) ;" ,methodName ,rParaStr));        
                }
                
            }            

            scriptString.Append("</"+"script>");
            Response.Write(scriptString.ToString());
        }
        #endregion


5.如何调用本页面中其它框架page的脚本?

CallTargetFrameScriptMethodInSamePageCallTargetFrameScriptMethodInSamePage#region CallTargetFrameScriptMethodInSamePage
        /**//**//**//// <summary>
        /// 调用本页面中其它框架内部page的脚本 ,
        /// </summary>        
        public static void CallTargetFrameScriptMethodInSamePage(HttpResponse Response ,string targetFrameName ,string methodName ,string[] paraStrs)
        {
            StringBuilder scriptString = new StringBuilder();
            scriptString.Append("<script language = javascript>");

            if(paraStrs == null)
            {
                scriptString.Append(string.Format("window.parent.{0}.{1}() ; ;" ,targetFrameName ,methodName));
            }
            else
            {
                string rParaStr = string.Format("''{0}''" ,paraStrs[0]) ;
                for(int i=1 ;i<paraStrs.Length ;i++)
                {
                    rParaStr += string.Format(", ''{0}''" ,paraStrs[i]) ;
                }
                scriptString.Append(string.Format("window.parent.{0}.{1}({2}) ; ;" ,targetFrameName ,methodName ,rParaStr));    
            }
                
            scriptString.Append("</"+"script>");
            Response.Write(scriptString.ToString());
        }
        #endregion

、、子窗口向父窗口传值 另一方法

要传值的窗口(即内容控件在这个页面)

html button按钮打开一个新窗口

<input id="Button1" type="button" value="选择人员"  οnclick=" otherman()" /></td>

调用如下js
 function otherman(e)
 {
 
           window.open("renyuan.aspx?e=1",null,"height=450,width=600,directories = no,status=no,toolbar=no,menubar=no,location=no,titlebar = no,scrollbars = no");
              
    }

下面是被打开的窗口

protected void Button1_Click(object sender, EventArgs e)
        {
            string txt = "";
            for (int j = 0; j < lstSelEmp.Items.Count; j++)
            {
                txt += lstSelEmp.Items[j];
                txt += ";";
            }//上面内容是获得选定的items 的值,也就是我们要传到父窗口的值
    RegisterStartupScript("", "<script language=\"javascript\">window.close(); opener.document.all.txtOtherMan.value = ‘“+txt+”'';</script>");

//txtOtherMan:这个是父窗口中的asp:textbox控件,『我们有时候往往需要配合一个隐藏的id如,传递人员的时候我们传递人名和id而id我们要隐藏的,用asp.net控件如果设置为visble=false,就读不到这个控件的id所以用html控件,或html的以藏属性』

//

也可以用这个方法!

RegisterStartupScript("", "<script language=\"javascript\">window.close(); opener.document.all.txtOtherMan.value = window.Form1.hide.value;;</script>");

//hide :这个是本窗口(子)的html控件的值,不过就是hide 这个控件要在激发这个事件前有值!

//

//用RegisterStartupScript这个方法来运行js代码块,如果我们用Response.Write("....")就不能正确返回,如此看出,我们应该用RegisterStartupScript()这个方法来运行脚本!
           
        }

转载于:https://www.cnblogs.com/zzlifeng/archive/2008/02/26/1081535.html

ASP.NET页面间的传值方法(2)相关推荐

  1. jsp java 传值方法_JSP页面间的传值方法总结

    前言 jsp 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧.试着将各种方式总结下来,需要时可以进行权衡利弊选择最合适的方式.下面来一起看看详细的介绍: 1. url 链接后追加参数 ...

  2. asp.net页面间数据传递方法总结篇

    1. Get(即使用QueryString显式传递) 方式:在url后面跟参数. 特点:简单.方便. 缺点:字符串长度最长为255个字符:数据泄漏在url中. 适用数据:简单.少量.关键的数据. 适用 ...

  3. jsp页面间的传值方法

    JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...

  4. java jsp 传值_jsp页面间的传值方法

    JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...

  5. asp.net的几种页面间的传值方法

    今天TM群里有人问起关于页面传值的方法,又引发了一场讨论.看来这个还是有很多人关注的,因此我就我个人观点做了些总结,希望对大家有所帮助. 1.  使用QueryString变量 QueryString ...

  6. ASP.NET页面间的传值的几种方法

           asp.net  web  forms    给开发者提供了极好的事件驱动开发模式.然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的asp应用程序中,你能够通过 ...

  7. ASP.NET页面间数据传递的方法

    本文我们将讨论的是ASP.NET页面间数据传递的几种方法,对此希望能帮助大家正确的理解ASP.NET页面间数据传递的用处以及便利性. 0.引言 Web页面是无状态的, 服务器对每一次请求都认为来自不同 ...

  8. ASP.NET页面间数据传递的几种方法

    1.ASP.NET页面间数据传递的各种方法和分析 1.1 使用Querystring 方法 QueryString 也叫查询字符串, 这种方法将要传递的数据附加在网页地址(URL)后面进行传递.如页面 ...

  9. 【项目经验】——ASP.NET页面间传值

    最近项目中涉及到很多页面传值的内容,今天,就和大家分享一下最常用的集中ASP.NET页面间传值的几种方法. 一.QueryString传值 QueryString是平常传值中用的比较多的一种方式,使用 ...

  10. ASP.NET页面刷新的实现方法

    先看看ASP.NET页面刷新的实现方法: 第一: private void Button1_Click( object sender, System.EventArgs e ) { Response. ...

最新文章

  1. LeetCode 75. Sort Colors--Python解法
  2. len(x) 击败 x.len(),从内置函数看 Python 的设计思想
  3. 为什么说企业做网站不要选择或找低价便宜的网站建设制作公司?
  4. export ,export default 和 import 区别 以及用法
  5. 高级 Java 必须突破的 10 个知识点
  6. SpringBoot2 集成xJar插件 动态解密jar包,避免源码泄露或反编译
  7. linux 查找并删除
  8. kafka-windows10中测试使用
  9. 巨波公第3子登国公后裔在荆州(巨波公6子的后裔,全部水落石出)
  10. ai条码插件免安装_Illustrator条形码插件
  11. hp服务器960g固态硬盘,蘑菇爱搞机 篇五十八:又一波大船靠岸,给我带来了一条靠谱的固态——三星PM963企业级固态硬盘960G 深度评测...
  12. 笔记本win10玩红警黑屏_你的红警还黑屏吗?
  13. 老虎证券开放api常用常量
  14. KeilC51单片机外部中断原理解释
  15. Hubstudio指纹浏览器和MaxProxy代理的配置教程
  16. laravel broadcas广播
  17. 解决MySQL CPU占用100%的经验总结 转
  18. mysql eav_Magento的EAV模型窥探
  19. 浅谈加密技术在电子商务中的应用
  20. video mp4 网页播放器有声音无图像的解决办法

热门文章

  1. 程序包管理之编译安装
  2. Myeclipse字符集设置
  3. Oracle数据库多语言文字存储解决方案
  4. Apache下设置整站变灰方法
  5. 七年之后的《深入理解计算机系统》
  6. element-ui的密码验证
  7. 使用git来管理微信小程序
  8. 电脑中的打印驱动程序如何打包_旧驱动程序会教您如何处理笔记本电脑上的黑屏...
  9. c语言输入身高计算标准体重_体质测试 | 身高 / 体重测试评分标准及方法
  10. android 禁用跳转动画,android – 禁用ViewPager滚动动画