各位高手,有个问题求助,我搞了一天,也从网上查询了许久,找不到办法,请帮帮我。
事由:
我使用 vs2010 c# , ie8 建网站,现有父页面A和子页面B。
A 页面(父页面):
在A 页面(A.aspx)有一个GridView网格Gridview_A, Gridview_A 通过A 页面上的按键 Button_A_Click 将 表Table_A (Table_A 放在 Session["Table_A"] 中)绑定,A 页面(A.aspx)还有一个调用子页面 B(B.aspx)的按键 Button_AcallB_Click,内置代码为:
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "click", "var left=Math.round((window.screen.width-880)/2);var top=Math.round((window.screen.height-600)/2);window.open('B.aspx','Notes','height=600, width=880, top='+top+', left='+left+',scrollbars=yes,toolbar=no, menubar=no,resizable=no,location=no, status=no');", true);
用于打开子页面 B(B.aspx)。
在A 页面的后台(A.aspx.cs)中,有一个方法:
public void method_A()
    {
        // 从 Session["Table_A"] 取出保存的人员表 Table_A,绑定及刷新A 页面上的网格 Gridview_A
        // 其代码与按键 Button_A_Click (将 表Table_A (Table_A 放在 Session["Table_A"] 中)绑定)完全相同
     }B页面(子页面):
B页面 有一个按键Button_B_Click, 其代码功能是从sql数据库查询数据后放入 Session["Table_A"] 中,然后从 Session["Table_A"] 取出表 Table_A 绑定到父页面 A的Gridview_A上,然后关闭子页面 B 重新回到主页面 A 上。需要实现:在子页面 B上不能直接绑定数据到 主页A上的Gridview_A中,那么只能调用主页A页面上的方法 method_A(),或者执行 主页A中的按键 Button_A_Click 中的代码来实现。问题:我用js 或c# 代码都不能实现,敬请大家指教。最好有完整的前台后台,父页子页代码。
我刚转入 asp c# , 希望指点,给分50,谢谢!

解决方案 »

  1.   

    method_A() 单独写在一个类里面不行吗?
    如果需要参数则传递进去返回去值。然后A,B页面都就可以用了。
      

  2.   

    如果将method_A() 单独写一个类,则不能绑定和刷新页面父 A(aaspx)中的网格Gridview_A
      

  3.   

    我现在不需要传递参数返回值,我的目的是需要在子页面B中取出表Table_A(放在Session["Table_A"] 中),然后将该表绑定在 父页面A 上的网格Gridview_A中,刷新后关闭B页面返回到A页面上 
      

  4.   

    在A添加一个Button(用样式设置为隐藏),绑定事件,重新绑定GV
    B可以用js触发 jQuery(window.opener).find("#RButton").click();
      

  5.   

     jQuery(window.opener).find("#RButton").click();
     提示“  缺少对象”
      

  6.   

    我已在A添加一个Button(用样式设置为隐藏),绑定事件,重新绑定GV
      

  7.   

    我自己搞出来了:
    方法:通过 js 互调
    具体:
    父页面 建两个js 函数:
    function callMethod() // 调用方法,用于绑定 table 到 GV(Gridview_A)
                    {
                        var s = "<%=GridView_jion_DataBounding()%>";
                        alert(s);
                    }                function refreshpage() // 调用按键 click,用于刷新页面(不需要代码),
                    {
                       // var obj = document.getElementById('<% =Buttonsx%>')  //   document.getElementById("Button_sx");
                        var obj = document.getElementById('MainContent_Buttonsx') //通过js 调试中查出 Buttonsx 的实际id,通过 <% =Buttonsx%> 不能查出
                        obj.click();
                    }子页面
    1、建 一个js 函数,调用父页面 JS 函数
            function callFatherjs() // 调用父页面js
            {
                window.opener.callMethod();  // 调用父页面方法
                window.opener.refreshpage(); // 调用父页面按键 click,用于刷新父页面
             }
    2、在保存完 table 到 Session: 
    Session["Vs_dt_jion"] = dt_jion; // 保存人员,用于绑定父页面的 gridview_jion
    加一句:
                 ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>callFatherjs();</script>");  //调用 子页面 js
    // 以上这句 通过本页面js 调用父页面js,从而调用父页面的js,父页面的js 在调用父页面的方法(绑定数据)和按键click(用于刷新页面,从而显示数据在父页面的 GV中)
    ok
      

  8.   

    MARK      。。        。
      

  9.   

    当然你可以使用C#程序来实现:
    其实B.aspx.cs就可以执行A.aspx.cs的方法,或者反之。参考:
    http://www.cnblogs.com/insus/p/3656800.html
      

  10.   


    asp.net 页面一瞬间就结束生命期了,所以在 asp.net 端根本不存在所谓“两个页面交互”的说法。只有浏览器端才存在 opener 机制。如果先把机制搞对了,其实非常简单。