在a.aspx上有一个textbox tex,和一个按钮,点击按钮弹出b.aspx,同时传递一个id (这个id存在a.aspx的viewstates中,也可以暂存在另一个textbox中)给b.aspx。  
b.aspx上有个checkboxlist ck,按保存按钮,通过循环返回ck被选中项的字符串。这个字符串是用来更新 a.aspx上的 tex.text。所以不返回字符串,直接更新a.aspx的tex也可以。基本需求就这样了。获取checkboxlist的cs代码是这样的:
       for (int i = 0; i < ck.Items.Count; i++)
       {
           //str 就是返回值
          if (this.ck.Items[i].Selected)
           {
               str=str+this.ck.Items[i].Value+";" ;
           }  
       }
   目前通过 <script language='JavaScript'>window.open('{0})> 这种方式实现传值到b.aspx,但无法返回值,网上找了很多资料,基本上是用js才能实现,可惜我js语法更烂,一直不能实现。特向大家请教。

解决方案 »

  1.   

    1.使用window.showModelDialog('')的returnValue来实现
    2.使用session 将返回值传回
      Session["str"]=str;
      
      

  2.   

    在b中,可以通过window.opener.document.getElementById("元素id").innerHTML 或value = str
      

  3.   

    q107770540说的第一种方法,我原来试过,但一直不能获取这个返回的value。第二种方法问题在于关闭了b页面后不能继续执行a页面代码,从而使用session更新textbox.
    cpp2017兄的说的方法也试过,但可能是我脚本有问题,所以一直不能执行。希望继续能给个比较详细的代码。  谢谢两位啦。
      

  4.   

    以showmodelDialog为例: var returnValue = window.showModalDialog("b.aspx", "", "dialogWidth=680px;dialogHeight=430px;status:no");   
    for (int i = 0; i < ck.Items.Count; i++)
      {
      //str 就是返回值
      if (this.ck.Items[i].Selected)
      {
      str=str+this.ck.Items[i].Value+";" ;
      }
      }
     ScriptManager.RegisterStartupScript(this, this.GetType(), "xx", "window.returnValue="+str+"; window.close();", true);
      

  5.   

    for (int i = 0; i < ck.Items.Count; i++)
      {
      if (this.ck.Items[i].Selected)
      {
      str+=this.ck.Items[i].Value+";" ;
      }
    }
    ClientScript.RegisterStartupScript(this.GetType(), "message", "<script language='javascript' >window.opener.document.getElementById(\"txt\").Value="+str+";</script>");;
      

  6.   

    如果不想用Session等,可以通过以下方式实现:Jscript.AjaxRunJs(this, string.Format("window.returnValue='{0}$$${1}';window.close();", PersoName, departName));此处的{0}和{1}大家知道是占位符,中午需要用“$$$”隔开(无论传几个值都可以,嘿嘿~~~),后面的PersoName,departName是赋的相应的值,在父页面,我们通过下面这个方式获取:<script type="text/jscript">function AddJinBieGuanLi()
           {
                var url = "LevelManager.aspx";   // 相对应的窗体页面
               var result=window.showModalDialog(Url,'tempdialog','dialogWidth:750px;dialogHeight:500px;status:no;'); 
                if(result !=null)
                {
                    var val=result.split('$$$');
                    document.getElementById("txtLingYongRen").value=val[0];
                    document.getElementById("txtDepartmentName").value=val[1];
                }      }
    </script>注意上面蓝色背景的代码,嘿嘿~~~~~~把拿过来的值赋给txtLingYongRen,txtDepartmentName两个控件。
      

  7.   

    window.opener.document.getElementById或是window.parent取值
      

  8.   

    刚才试了下,不知道哪里写错了,还是不行。这里是父页面按钮事件代码,弹出子页面        string str = "Reason.aspx?ID={0}";
            str = string.Format(str, ViewState["ajdm_detail"].ToString());
            string js = "<script language='JavaScript'>var txt=document.getElementById('{0}');txt.value = window.showModalDialog('{1}', '', 'dialogWidth=680px;dialogHeight=430px;status:no');</script>";
            HttpContext.Current.Response.Write(string.Format(js, "txtanyou" ,str));        这个是子页面保存并返回的       string str="";
           for (int i = 0; i < cbAnyou.Items.Count; i++)
           {
               if (this.cbAnyou.Items[i].Selected)
               {
                   str=str+this.cbAnyou.Items[i].Value+";" ;
               }
           }
           
           ScriptManager.RegisterStartupScript(this, this.GetType(), "xx", "window.returnValue=" + str + "; window.close();", true);
      请高手们分析分析阿
      

  9.   

    点击按钮,没有弹出子页面,在父页面左下角有黄色感叹号,点击查看详细,提示是txt也就是 document.getElementById()这个为空,但我的id没错阿。怎么回事
      

  10.   

    happy664618843 的提示我不是很清楚,现在问题是不能弹出窗口,