第一个页面
<script language="javascript" charset="gb2312">
function searchvalue()
{
var sql="select * from companyjob";
document.all.Form1.label.value=sql;
var url="person/jobsearchresult.aspx";
window.open(url,'_blank');
}
</script>
这个意思是把var sql的值放到label里,然后打开一个新页面,然后在新页面里,我怎么得到这个label值?
if(!IsPostBack)
{//怎么得到上个页面label的值?
}

解决方案 »

  1.   

    我不想通过var url="person/jobsearchresult.aspx?.....";这样的方式,因为这样会把sql语句暴露在ie地址里拉
    用session把,也不行,因为javascript好像没有发现session呢怎么解决?
      

  2.   

    这个问题,有个办法。 写个JS加密函数,把SQL语句加密穿过去,你觉得,不然我也没想到什么好方法
      

  3.   

    我觉得应该有直接取得值的方法啊,我知道另一个页面用javascript应该能取到的,但是应该还有更直接的方法,你说的加密什么的,我觉得是不方便的
      

  4.   

    为什么要在客户端进行这个操作?
    aspx各个页面之间可以互相读取web控件的值
      

  5.   

    为什么要在客户端进行这个操作?
    因为是这个sql语句的where后面的值是从html控件里取得的,html控件值是用javascript填充的,所以如果不在这里那只有再用个隐藏控件,也比较麻烦的所以用客户端操作然后直接把sql传过去应该是最简单的了aspx各个页面之间可以互相读取web控件的值
    你给个简单例子,兄弟
      

  6.   

    ASP.NET WEB FORMS 页面间的传值方法
    ASP.NET WEB FORMS  给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面,用同样的方法在ASP.NET中实现有点麻烦。在这里,我们可以通过其他方式来解决这种情形。ASP.NET为我们提供了三种方式,一种是可以通过用QueryString来传送相应的值,再一种是通过session变量来传送相应的值,还有就是通过Server.Transfer方法来实现。下面分别一一介绍:
    一、使用Querystring
    Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成传值工作,步骤如下:
    1、创建一个web form
    2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
    3、为button按钮创建click事件
    代码如下:
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
     string url;
     url="webform2.aspx?name=" + 
      TextBox1.Text + "&email=" + 
      TextBox2.Text;
     Response.Redirect(url);
    }
    4、新建一个目标页面命名为webform2
    5、在webform2中放置两个Label1,Label2
    在webform2的Page_Load中添加如下代码:
    private void Page_Load
    (object sender, System.EventArgs e)
    {
     Label1.Text=Request.QueryString["name"];
     Label2.Text=Request.QueryString["email"];
    }
    运行,即可看到传递后的结果了。
    二、使用Session变量
    使用Session变量传值是一种最常见的方式了,此中方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值removed后,变量才会消失。举个例子看看:
    1、创建一个web form
    2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
    3、为button按钮创建click事件
    代码如下:
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
            Session["name"]=TextBox1.Text;
     Session["email"]=TextBox2.Text;
     Response.Redirect("webform2.aspx");
    }
    4、新建一个目标页面命名为webform2
    5、在webform2中放置两个Label1,Label2
    在webform2的Page_Load中添加如下代码:
    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、创建一个web form
    2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
    3、为button按钮创建click事件
    代码如下:
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
     Server.Transfer("webform2.aspx");
    }
    4、创建过程来返回TextBox1,TextBox2控件的值代码如下:
    public string Name
    {
     get
     {
      return TextBox1.Text;
     }
    }
    public string EMail
    {
     get
     {
      return TextBox2.Text;
     }
    }
    5、新建一个目标页面命名为webform2
    6、在webform2中放置两个Label1,Label2
    在webform2的Page_Load中添加如下代码:
    private void Page_Load
    (object sender, System.EventArgs e)
    { //创建原始窗体的实例
     WebForm1 wf1;
     //获得实例化的句柄
     wf1=(WebForm1)Context.Handler;
     Label1.Text=wf1.Name;
     Label2.Text=wf1.EMail;}上面的东西是copy来的,上面的第三种方法就是
      

  7.   

    同时可以看看
    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vbcon/html/vbtskpassingvaluesbetweenwebformspages.asp
      

  8.   

    问题没有解决啊
    就是因为父页是html控件,我怎么把这个值传递到新打开的页面中?1,我想通过javascript传递,但是javascript传递要通过?传递字符串,暴露在外面了2  我想用session,但是由于是要打开新页面,而且要点击时写session的,所以我的button按钮必须是服务器控件,问题是先执行的js打开页面,然后才写的session,所以问题就是我的session总是慢了一点
    比如我第一页选择的是北京,那么点击按钮是显示正确的,然后我关闭调新页,重新选择,选择上海,在点击按钮打开,这时候还是北京,只有我关掉再打开,才是上海,因为在服务器事件里写window.open,父页面会刷新的,所以我必须用js,这样默认的就是先执行js,才执行服务器事件 3 我想通过一个隐藏域来传递,但是第二个页面好像没有办法接收高手帮忙,问题的就是我怎么把客户选择的html的值传递到新打开的页面而不用”?“方式?
      

  9.   

    用Server.Transfer
    可以解决这个问题吧?你要什么样效果呢?
      

  10.   

    不用Server.Transfer,transfer能打开一个新页面吗?再说,transfer能传递html控件的值吗?我用transfer不知道是什么原因,我总觉得这个方法挺慢的
      

  11.   

    你要求person/jobsearchresult.aspx是在客户端还是服务器端获取sql这个变量?如果是客户端,你查查MSDN,在window.open中有一个object就是让你传递arguments的。如果是在服务器端,那就不要用window.open,而是写一个form,target="_blank",action="person/jobsearchresult.aspx",method="post",不要runat="server",把sql放到一个hidden里面,然后formName.submit()就把sql变量通过hidden控件post过去了。
      

  12.   

    我觉得比较难处理了,按你的要求,url加密是个方法
      

  13.   

    说明白了
    你是不是要用js实现两个页面值互访,而且又不用url?
      

  14.   

    不是的,我现在做一个搜索,用户输入搜索的几个条件,然后点击搜索就新打开一个页面出来搜索结果了这几个条件关键是有几个条件是客户端的连动菜单,要无刷新的,所以我就用javascript实现做了
    所以就出来了刚才的问题,这几个值我怎么传递到新页面中去?
      

  15.   

    一个例子:
    1.html:
    <form name="test">
    <input id="guest">
    <input type="button" value="open" onclick="javascript:window.open('2.html')">
    </form>
    2.html:
    <form>
    <select id="AA" onchange="javascript:opener.test.guest.value=document.all.AA.value;window.close()">
    <option value="first">first</option>
    <option value="2">second</option>
    <option value="third">third</option>
    </select>
    </form>
    是不是和你的要求相似!
      

  16.   

    简单的说就是要从客户端传递一个参数到服务器端,而不用url参数的方式
      

  17.   

    以前在asp中倒是很容易的,通过opener.form.id.value
      

  18.   

    两个办法:
    1.在新打开的窗口中,先用脚本获取父页面的值并且写入该页面某个控件里面,完成之后,自动提交,此时你在服务器端就可以得到父页面的条件了.
    2.先打开子窗口,待子窗口加载完毕后,从父窗口中用脚本向子窗口的某个控件写父窗口中选择的条件值,然后由父窗口命令子窗口提交页面
    方法2与方法1是相同的,只不过一个是在子页面取得值,一个是由父页面控制而已.
    子页面取父页面值的脚本子页面控件.value = parent.document.all("xxx").value;
    document.Form1.submit();
      

  19.   

    cat_hsfz() ( ) 的思路应该是比较好的, use another form and set its target to "_blank"<form method="post" target="_blank" id="form2">
      <input type=hidden name="query">
    </form><script language="javascript">
    function searchvalue()
    {
    var sql="select * from companyjob";
    document.all.form2.query.value=sql;
    document.all.form2.action="person/jobsearchresult.aspx";
    document.all.form2.submit();
    }
    </script>in your aspx, use Request.Form["query"]
      

  20.   

    asp.net本身是一个runat=server的form了,里面还能写form么?
    页面的其他代码还要面向对象呢,所以这个大的是不能去的啊
      

  21.   

    用Server.Transfer才可以。不过不是用JS写。
      

  22.   

    你可不可以只传递参数啊?
    为什么要传递整个SQL呢????
    SQL可以更具参数在新的页面生成阿.另外,如果非要这样的话,可以参考window.open的传值方式,在另一个页面的Javascript脚本中定义Page_onLoad事件中利用opener对象接受该argument并存放至一Hidden中,在后台的Page_Load事件中访问该Hiden值。
    新页面Load的顺序是先执行JS端的Page_onLoad事件再执行后台代码的。
      

  23.   

    我现在用saucer(思归) 的方法,问题是这个form必须是在大form的外面(aspnet整个的form)才行,那这个搜索位置只能固定在顶端了,有什么好办法没?
      

  24.   

    做了个例子<%@ Page Language="vb" AutoEventWireup="false" Codebehind="main.aspx.vb" Inherits="zero.main"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>main</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script language="javascript" charset="gb2312">
    function searchvalue()
    {
    var sql="select * from companyjob";
    SetCookie("SendSql",sql);
    var url="child.aspx";
    window.open(url,'_blank');
    }
       function SetCookie(name, value) 
    {
    document.cookie = name + "=" + value;
    }
    </script>
    </HEAD>
    <body MS_POSITIONING="GridLayout" >
    <form id="Form1" method="post" runat="server">
    <INPUT id="Hidden1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" type="hidden"
    name="Hidden1" runat="server"><INPUT style="Z-INDEX: 102; LEFT: 96px; POSITION: absolute; TOP: 144px" type="button" onclick="searchvalue();"
    value="Open" id="Button1" name="Button1">
    <asp:Button id="Button2" style="Z-INDEX: 103; LEFT: 256px; POSITION: absolute; TOP: 152px" runat="server"
    Text="Button"></asp:Button>
    </form>
    </body>
    </HTML>
      

  25.   

    child 页<%@ Page Language="vb" AutoEventWireup="false" Codebehind="child.aspx.vb" Inherits="zero.child"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>child</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script language =javascript >
    function getv()
    {
    alert(document.forms("Hidden1"));

     document.all("Hidden1").value=document.forms("Hidden1");
    }

    </script>
    </HEAD>
    <body MS_POSITIONING="GridLayout" >
    <form id="Form1" method="post" runat="server">
    <INPUT style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" type="hidden" id="Hidden1"
    name="Hidden1" runat="server"></FONT>
    </form>
    </body>
    </HTML>
    .vb文件
     If Not IsPostBack Then
                'Response.Write(Request.Form("Hidden1"))
                Dim cookie As HttpCookie = Request.Cookies("SendSql")
                If Not cookie Is Nothing Then
                    Response.Write(cookie.Value)
                End If
            End If
      

  26.   

    forms cannot be nested, just create another form without runat=server<form runat='server'></form>..
    <form id=anthorform>
    ..
    </form>you just need to copy the controls valuesor you know what, just use one form, but dovar a = document.forms[0].action;
    var t = document.forms[0].target;
    ...document.forms[0].action = '....';
    document.forms[0].target = '_blank';
    document.forms[0].submit();
    document.forms[0].action = a;
    document.forms[0].target = t;