在Asp.net中,从A页面中弹出B页面,在B页面中选择数据后,关闭并将数据更新到A页面,是一种常用 的方式。只是我对Javascript不熟悉,所以捣鼓了一下午,终于有了一点成绩:
测试项目有两个页面:Default.aspx及Default2.aspx,在Default.aspx页面上有一个TextBox1及一个Button1,Button1用于触发Default2.aspx,TextBox1用于接收从子页面传回的值。
Button1的代码如下:

StringBuilder s = new StringBuilder();
s.Append("<script language=javascript>");
s.Append("var a=window.showModalDialog('Default2.aspx');");
s.Append("if(a!=null)");
s.Append("document.all('TextBox1').value=a;");
s.Append("</script>");
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
string sname = "lt";
if (!cs.IsStartupScriptRegistered(cstype, sname))
cs.RegisterStartupScript(cstype, sname, s.ToString());

Default2.aspx页面内有一个CheckBoxList1及一个Button1,Button1执行返回选择的CheckBoxList1的值,并将当前页面关闭。
代码如下:

protected void Button1_Click(object sender, EventArgs e)
{
StringBuilder s = new StringBuilder();
s.Append("<script language=javascript>" + "\n");
s.Append("window.returnValue='" + this.GetSelectValue() + "';" + "\n");
s.Append("window.close();"+"\n");
s.Append("</script>");
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
string csname = "ltype";
if (!cs.IsStartupScriptRegistered(cstype, csname))
cs.RegisterStartupScript(cstype, csname, s.ToString());
}
private string GetSelectValue()
{
string rvalue = "";
for (int i = 0; i < this.CheckBoxList1.Items.Count; i++)
{
if (this.CheckBoxList1.Items[i].Selected)
{
if (rvalue == "")
rvalue += this.CheckBoxList1.Items[i].Text;
else
rvalue += "," + this.CheckBoxList1.Items[i].Text;
}
}
return rvalue;
}

此时执行程序,在Default2.aspx中不会关闭且不能传回值,很重要的一点:
在head中,加入这一行:

<base target="_self" />

asp.net window.showModalDialog 后台用法(兼容谷歌浏览器)

  1. StringBuilder s = new StringBuilder();
  2. s.Append("<script language=javascript>");
  3. s.Append("var a=window.showModalDialog('selectnh.aspx?zhen=" + this.sxdw1.zj + "&cun=" + this.sxdw1.cj + "&zu=" + this.sxdw1.zu + "');");
  4. s.Append(@"//for chrome
  5. if(typeof(a) == 'undefined') {
  6. a = window.returnValue;
  7. }");
  8. s.Append("document.getElementById('txtcbfdb').value=a[0];");
  9. s.Append("document.getElementById('hdnhid').value=a[1];");
  10. s.Append("</script>");
  11. Type cstype = this.GetType();
  12. ClientScriptManager cs =this.ClientScript;
  13. string sname = "lt";
  14. if (!cs.IsStartupScriptRegistered(cstype, sname))
  15. cs.RegisterStartupScript(cstype, sname, s.ToString());

父页面

按钮事件代码

  1. StringBuilder s = new StringBuilder();
  2. s.Append("<script language=javascript>" + "\n");
  3. s.Append("var result=new Array;  ");
  4. s.Append("result[0]="+this.ddlnh.SelectedItem.Text+";");
  5. s.Append("result[1]="+this.ddlnh.SelectedValue+";");
  6. s.Append(@"//for chrome
  7. if(window.opener != undefined) {window.opener.returnValue = result;window.opener.close();} else{");
  8. s.Append("window.returnValue=result;}" + "\n");
  9. s.Append("window.close();" + "\n");
  10. s.Append("</script>");
  11. Type cstype = this.GetType();
  12. ClientScriptManager cs = this.ClientScript;
  13. string csname = "ltype";
  14. if (!cs.IsStartupScriptRegistered(cstype, csname))
  15. cs.RegisterStartupScript(cstype, csname, s.ToString());

子页面 按钮事件代码

下面的传多个值的时候记得加‘’号

  1. StringBuilder s = new StringBuilder();
  2. s.Append("<script language=javascript>" + "\n");
  3. s.Append("var result=new Array(10);  ");
  4. if (!string.IsNullOrEmpty(model.YWCBHT))
  5. {
  6. s.Append("result[0]=" + model.CBHTBM.Trim() + ";");//合同编码
  7. }
  8. else
  9. {
  10. s.Append("result[0]=" + model.JYQZBM.Trim() + ";");//经营权证编码
  11. }
  12. NEWLAND.BLL.T_dictionary zdbll = new NEWLAND.BLL.T_dictionary();
  13. s.Append("result[1]='" + zdbll.Getzd("承包经营权取得方式", model.CBFS).Trim() + "';");//承包方式
  14. string qzsj = model.CBKSRQ + "至" + model.CBJSRQ;
  15. s.Append("result[2]='" + qzsj + "';");
  16. s.Append("result[3]='" + model.CBFMC.Trim() + "';");
  17. s.Append("result[4]=" + model.LXDH.Trim() + ";");
  18. s.Append("result[5]='" + zdbll.Getzd("证件类型", model.CBFZJLX).Trim() + "';");
  19. s.Append("result[6]='" + model.CBFZJHM.Trim() + "';");
  20. s.Append("result[7]='" + model.CBFDZ.Trim() + "';");
  21. s.Append("result[8]='" + model.YZBM.Trim() + "';");
  22. NEWLAND.BLL.DK dkbll = new NEWLAND.BLL.DK();
  23. DataTable dkbt = dkbll.GetList("cbfdbid='"+this.ddlnh.SelectedValue+"'").Tables[0];
  24. if (dkbt.Rows.Count > 0)
  25. {
  26. string strs = "共"+dkbt.Rows.Count+"块";
  27. decimal htmj = 0;
  28. for (int t = 0; t < dkbt.Rows.Count; t++)
  29. {
  30. try
  31. {
  32. htmj += decimal.Parse(dkbt.Rows[t]["htmj"].ToString());
  33. }
  34. catch { }
  35. }
  36. strs +=htmj+ "亩";
  37. s.Append("result[9]='" + strs + "';");
  38. }
  39. else
  40. {
  41. string strs = "共0块0亩";
  42. s.Append("result[9]='" + strs + "';");
  43. }
  44. s.Append(@"//for chrome
  45. if(window.opener != undefined) {window.opener.returnValue = result;window.opener.close();} else{");
  46. s.Append("window.returnValue=result;}" + "\n");
  47. s.Append("window.close();" + "\n");
  48. s.Append("</script>");
  49. Type cstype = this.GetType();
  50. ClientScriptManager cs = this.ClientScript;
  51. string csname = "ltype";
  52. if (!cs.IsStartupScriptRegistered(cstype, csname))
  53. cs.RegisterStartupScript(cstype, csname, s.ToString());

子页面一定记得在head中加入   <base target="_self" />

Asp.net中,从弹出窗体取选择值(转)的更多相关文章

  1. ckfinder在IE10,IE9中的弹出框不能选择,或者不能上传解决方法

    在IE9,或IE10中ckfinder在IE10,IE9中的弹出框不能选择,或者不能上传解决方法   把弹出框嵌入到jquery dialog中.可以解决 I did: // javascript f ...

  2. abap中的弹出窗体函数

    POPUP_TO_CONFIRM_WITH_MESSAGE     会话框确实处理步骤; 用识别正文POPUP_TO_SELECT_MONTH             日历:弹出 POPUP_TO_C ...

  3. [King.yue]Ext.JS 弹出窗体取值赋值

    //从Grid取值 var name = Ext.getCmp(gridGridID).getView().getSelectionModel().getSelection()[0].data.Nam ...

  4. 【转】asp.net中设置弹出谈话框的几种方式详解

    源地址:https://blog.csdn.net/zou15093087438/article/details/79637114 注:可用winform的MessageBox的方法,只需引用Syst ...

  5. EBS OAF开发中实现參数式弹出窗体

    EBS OAF开发中实现參数式弹出窗体 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 概览 參数式弹出窗体和嵌入式弹出窗体不一样,它拥有独立 ...

  6. 线程中使用SaveFileDialog不能弹出窗体

    在子线程中使用 SaveFileDialog 无法弹出窗体,主要是我们需要用主线程去处理SaveFileDialog , 我们可以将子线程进行如下设置: public partial class Fo ...

  7. Bootstrap datepicker 在弹出窗体modal中不工作

    解决办法 在 show 方法后面 添加 下面一段代码 $('#modalCard').modal('show');—例子 打开 弹出窗体 //$('#modalCard').modal('hide') ...

  8. MVVM模式下弹出窗体

    原地址:http://www.cnblogs.com/yk250/p/5773425.html 在mvvm模式下弹出窗体,有使用接口模式传入参数new一个对象的,还有的是继承于一个window,然后在 ...

  9. Asp.net点击按钮弹出文件夹选择框的实现(网页)

    本文地址:http://www.cnblogs.com/PiaoMiaoGongZi/p/4092112.html 在Asp.net网站实际的开发中,比如:需要实现点击一个类似于FileUpload的 ...

随机推荐

  1. 转换编码,将Unicode编码转换成可以浏览的utf-8编码

    //转换编码,将Unicode编码转换成可以浏览的utf-8编码 public function unicodeDecode($name) { $pattern = '/([\w]+)|(\\\u([ ...

  2. mysql清除数据库中字符串空格方法

    update `z_lottery_list` set `win_number`=replace(`win_number`,' ','');

  3. java基础回顾(五)线程详解以及synchronized关键字

    本文将从线程的使用方式.源码.synchronized关键字的使用方式和陷阱以及一些例子展开java线程和synchronized关键字的内容. 一.线程的概念 线程就是程序中单独顺序的流控制.线程本 ...

  4. 【Android Developers Training】 13. 支持不同平台版本

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  5. ASP.NET Core 源码学习之 Logging[1]:Introduction

    在ASP.NET 4.X中,我们通常使用 log4net, NLog 等来记录日志,但是当我们引用的一些第三方类库使用不同的日志框架时,就比较混乱了.而在 ASP.Net Core 中内置了日志系统, ...

  6. 手机app微信支付后台处理流程

    第一步:客户在手机app确认订单,提交订单后,app将订单详情传给后台,后台将订单存入数据库,将存入数据库的id返回给app. 第二步:这时候手机端app会让客户选择哪种付款方式,我们做的是微信,所以 ...

  7. SQLite的总结与在C#的使用

    这几天接触了一下SQLite,算是有点收获吧,因此总结一下. SQLite简介: SQLite是用C语言编写的数据库引擎,可以运行在Linux.Windows.Mac平台上. SQLite安装简单,下 ...

  8. Vijos 1033 整数分解(版本2)

    描述 整数分解(版本2) 一个正整数可以分解成若干个自然数之和.请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大. 例 ...

  9. spring +springmvc+mybatis组合web.xml文件配置

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...

  10. asp.net验证码的编写

    很多时候我们在登录什么网站的时候,除了需要什么用户名和密码之外,有的还需要验证码那么在asp.net中这个验证码如何编写和设计,今天我就来给大家说一下: 首先创建一个页面名字随便起一个,我们这里叫做C ...