,但是在子窗的 aspx.CS 中却取不到空上 TextBox 的值。
请看
Child.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PopKeywords.aspx.cs" Inherits="WebUI.BusinessCenter.PopKeywords" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>关键字选择</title>
<link href="../css/css.css" rel="stylesheet" type="text/css" />
<base target="_self" />
</head>
<body>
<form id="form1" runat="server">
<table border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td height="40" align="center">
<asp:TextBox ID="txbChild" runat="server" Width="400px"></asp:TextBox>
</td>
</tr>
</table>
</form>
</body>
</html>
<script type="text/javascript" language="javascript">
<!--
var k = window.dialogArguments;
//获得父窗口传递来的值
if (k != null) {
document.getElementById("txbChild").value = k.document.getElementById("txbFather").value;
}
//-->
</script>
然后我在 Child.aspx.CS 后台中取 txbChild 的值
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebUI.BusinessCenter
{
public partial class PopKeywords : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string getFatherValue = this.txbChild_getFather.Text.ToString().Trim();
//实际上,getFatherValue 取得值是空的
}
}
}
我分析原因 是这样的:
因为后台是当一加载页面是,程序是由上往下执行,当 后台读到页面中 txbChild 时, javascript 还未给这个 TextBox 赋值,
因为 javascript 是在程序的最后执行的,就是说,程序结束的时,
才执行的这段 js
<script type="text/javascript" language="javascript">
<!--
var k = window.dialogArguments;
//获得父窗口传递来的值
if (k != null) {
document.getElementById("txbChild").value = k.document.getElementById("txbFather").value;
}
//-->
</script>
但是这段 js 还只能放在程序最下面,如果放上面,又会导致其它问题,
目前这种情况,怎么才能在 aspx.cs 后台取到前台的这个 txbChild 的值呢 !?
请各位大侠帮忙 !不胜感激!
29 个解决方案
#1
取不到的
#2
我想知道,k.document.getElementById("txbFather").value;这个值,在子窗口中传过来了吗?
#3
我确认一下,
k.document.getElementById("txbFather").value;这个值,在子窗口中传过来了吗?
肯定是传过来了,因为我已经用
document.getElementById("txbChild").value = k.document.getElementById("txbFather").value;
把取过来的值显示出来了,是有值的,
但是就是在 .CS 中取不到。
k.document.getElementById("txbFather").value;这个值,在子窗口中传过来了吗?
肯定是传过来了,因为我已经用
document.getElementById("txbChild").value = k.document.getElementById("txbFather").value;
把取过来的值显示出来了,是有值的,
但是就是在 .CS 中取不到。
#4
我有个想法,就是能不能在
if (!IsPostBack)
{
string getFatherValue = this.txbChild_getFather.Text.ToString().Trim();
//实际上,getFatherValue 取得值是空的
}
过后,或是过0.1秒再取一次,这样就应该能取到了,这方法可行吗
if (!IsPostBack)
{
string getFatherValue = this.txbChild_getFather.Text.ToString().Trim();
//实际上,getFatherValue 取得值是空的
}
过后,或是过0.1秒再取一次,这样就应该能取到了,这方法可行吗
#5
后台程序要执行完了net把html结果返回给客户端浏览器后,浏览器上才能执行javascript,你的猜想是错误的,不是还没执行到,而是后台已经执行完了,在后台执行的时候输入框是空的,还没有js给它赋值
#6
你可以在前台执行完脚本后,用ajax调后台
#7
哪位大侠能针对我这个现状,或是换种思路能解决一下呢
#8
这个问题解决不了吗
#9
把你要传递的值放入url,而不是argument
然后
string getFatherValue = this.Request[key].toString();
然后
string getFatherValue = this.Request[key].toString();
#10
<script type="text/javascript" language="javascript">
<!--
var k = window.dialogArguments;
//获得父窗口传递来的值
if (k != null) {
document.getElementById("txbChild").value = k; }
//-->
</script>
<!--
var k = window.dialogArguments;
//获得父窗口传递来的值
if (k != null) {
document.getElementById("txbChild").value = k; }
//-->
</script>
#11
在aspx 页面中,比如 js中如何取 TextBox 值
<script type="text/javascript" language="javascript">
<!--
function openChild() {
var k = window.showModalDialog("PopKeywords.aspx?ks=<%=System.Web.HttpContext.Current.Server.UrlEncode(TextBox1.Text) %>", window, "dialogWidth:800px;status:no;dialogHeight:700px");
//var k = window.showModalDialog("PopKeywords.aspx?" + (new Date()).valueOf(), window, "dialogWidth:500px;status:no;dialogHeight:650px")
if (k != null)
document.getElementById("txbFather").value = k;
}
//-->
</script>
我这样写取不到值,是空的啊
#12
var keyparams = document.getElementById("<%=txbFather.ClientID%>");
var k = window.showModalDialog("PopKeywords.aspx?ks=<%=System.Web.HttpContext.Current.Server.UrlEncode(keyparams.value) %>", window, "dialogWidth:800px;status:no;dialogHeight:700px");
我这样写了,但还是不行
#13
最好的方法是加个隐藏域。赋给这个隐藏域就OK。我经常这样写
#14
啊,加载就这要读出来啊。那应该行不通了,url传参吧。
#15
9楼告诉你了,你视而不见
#16
9楼的+1
#17
9楼的回复:
---------------------------------------
把你要传递的值放入url,而不是argument
然后
string getFatherValue = this.Request[key].toString();
--------------------------------------------
我已经这样做了,但是也碰到问题
---------------------------------------
把你要传递的值放入url,而不是argument
然后
string getFatherValue = this.Request[key].toString();
--------------------------------------------
我已经这样做了,但是也碰到问题
<script type="text/javascript" language="javascript">
<!--
function openChild() {
var k = window.showModalDialog("PopKeywords.aspx?ks=<%=System.Web.HttpContext.Current.Server.UrlEncode(TextBox1.Text) %>", window, "dialogWidth:800px;status:no;dialogHeight:700px");
//var k = window.showModalDialog("PopKeywords.aspx?" + (new Date()).valueOf(), window, "dialogWidth:500px;status:no;dialogHeight:650px")
if (k != null)
document.getElementById("txbFather").value = k;
}
//-->
</script>
我这样写取不到值,是空的啊
#18
js写到txbFather控件下面
#19
我把 js 写到了 那个 textbox 下面了,但还是 url 传递过来的是空值
#20
<tr>
<td height="30" bgcolor="#CAD2F4" align="left"> 关键字选择</td>
<td colspan="5" bgcolor="#FFFFFF" align="left">
<asp:TextBox ID="txbFather" class="inputtext" runat="server" Width="430px" onclick="openChild()"></asp:TextBox>
</td>
</tr>
<script type="text/javascript" language="javascript">
<!--
function openChild() {
var k = window.showModalDialog("PopKeywords.aspx?ks=<%=System.Web.HttpContext.Current.Server.UrlEncode(txbFather.Text) %>", window, "dialogWidth:800px;status:no;dialogHeight:700px");
//var k = window.showModalDialog("PopKeywords.aspx?" + (new Date()).valueOf(), window, "dialogWidth:500px;status:no;dialogHeight:650px")
if (k != null)
document.getElementById("txbFather").value = k;
}
//-->
</script>
我这样写了,但还是不行
#21
嘿嘿,起初我就想到了,楼主试试撒
#22
看我17 楼的,我已经做 url 了,但还有问题
#23
+1
#24
方法有很多种,你要是在服务器端的到,可以这样
Father.aspx
Child1.aspx
Child.aspx
使用frameset而不是使用base target=_self可以解决浏览器兼容性问题。
另外,如果使用js传递,可以传clientID
另外,你要明白代码的执行顺序,js代码是后执行的,服务器端代码是先执行的,js代码还没执行,你怎么等在服务器端得到呢?
Father.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function openChild(txt) {
k = window.showModalDialog("Child1.aspx?txt=" + encodeURIComponent(txt.value));
}
</script>
</head>
<body>
<form id="form1" runat="server">
<table>
<tr>
<td height="30" bgcolor="#CAD2F4" align="left">
关键字选择
</td>
<td colspan="5" bgcolor="#FFFFFF" align="left">
<asp:TextBox ID="txbFather" class="inputtext" runat="server" Width="430px" onclick="openChild(this)"></asp:TextBox>
</td>
</tr>
</table>
</form>
</body>
</html>
Child1.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<frameset rows="0,*" border="0" frameborder="0">
<frame src=""></frame>
<frame src="Child.aspx?txt=<%=Server.UrlEncode(Request.QueryString["txt"]) %>"></frame>
</frameset>
</html>
Child.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
txbChild.Text = Request.QueryString["txt"];
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="txbChild" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
</form>
</body>
</html>
使用frameset而不是使用base target=_self可以解决浏览器兼容性问题。
另外,如果使用js传递,可以传clientID
另外,你要明白代码的执行顺序,js代码是后执行的,服务器端代码是先执行的,js代码还没执行,你怎么等在服务器端得到呢?
#25
搞清楚楼上说的asp.net页面生命周期基本概念。
服务器是接受浏览器端请求,然后经过几乎整个生命周期,最终通过Render方法输出了html,这个html被浏览器接收到,才在窗口里显示出网页,以后才有所谓的javascript代码执行。
#26
不管你的js放在设计页面的上面还是下面,就算是“放出花来”,它也不可能在服务器端执行。等它在浏览器端执行时,服务器端当前页面实例对象别说什么代码都不执行,就是自身也早已经被GC销毁了。
#27
这会是楼主想要的
#28
如果你自己没有找对思路,那么退而求其次重新从设计角度改变自己的思路做起才是“正着”。如果一门心思只等要别人给你一个代码,就容易钻到死胡同里边出不来了。
#29
谢过各位技术前辈!!
更感谢net_lover (【孟子E章】) 真正的为我解决实际问题!不多说,就是一个字:打心里感动加感激!呵
更感谢net_lover (【孟子E章】) 真正的为我解决实际问题!不多说,就是一个字:打心里感动加感激!呵
#1
取不到的
#2
我想知道,k.document.getElementById("txbFather").value;这个值,在子窗口中传过来了吗?
#3
我确认一下,
k.document.getElementById("txbFather").value;这个值,在子窗口中传过来了吗?
肯定是传过来了,因为我已经用
document.getElementById("txbChild").value = k.document.getElementById("txbFather").value;
把取过来的值显示出来了,是有值的,
但是就是在 .CS 中取不到。
k.document.getElementById("txbFather").value;这个值,在子窗口中传过来了吗?
肯定是传过来了,因为我已经用
document.getElementById("txbChild").value = k.document.getElementById("txbFather").value;
把取过来的值显示出来了,是有值的,
但是就是在 .CS 中取不到。
#4
我有个想法,就是能不能在
if (!IsPostBack)
{
string getFatherValue = this.txbChild_getFather.Text.ToString().Trim();
//实际上,getFatherValue 取得值是空的
}
过后,或是过0.1秒再取一次,这样就应该能取到了,这方法可行吗
if (!IsPostBack)
{
string getFatherValue = this.txbChild_getFather.Text.ToString().Trim();
//实际上,getFatherValue 取得值是空的
}
过后,或是过0.1秒再取一次,这样就应该能取到了,这方法可行吗
#5
后台程序要执行完了net把html结果返回给客户端浏览器后,浏览器上才能执行javascript,你的猜想是错误的,不是还没执行到,而是后台已经执行完了,在后台执行的时候输入框是空的,还没有js给它赋值
#6
你可以在前台执行完脚本后,用ajax调后台
#7
哪位大侠能针对我这个现状,或是换种思路能解决一下呢
#8
这个问题解决不了吗
#9
把你要传递的值放入url,而不是argument
然后
string getFatherValue = this.Request[key].toString();
然后
string getFatherValue = this.Request[key].toString();
#10
<script type="text/javascript" language="javascript">
<!--
var k = window.dialogArguments;
//获得父窗口传递来的值
if (k != null) {
document.getElementById("txbChild").value = k; }
//-->
</script>
<!--
var k = window.dialogArguments;
//获得父窗口传递来的值
if (k != null) {
document.getElementById("txbChild").value = k; }
//-->
</script>
#11
在aspx 页面中,比如 js中如何取 TextBox 值
<script type="text/javascript" language="javascript">
<!--
function openChild() {
var k = window.showModalDialog("PopKeywords.aspx?ks=<%=System.Web.HttpContext.Current.Server.UrlEncode(TextBox1.Text) %>", window, "dialogWidth:800px;status:no;dialogHeight:700px");
//var k = window.showModalDialog("PopKeywords.aspx?" + (new Date()).valueOf(), window, "dialogWidth:500px;status:no;dialogHeight:650px")
if (k != null)
document.getElementById("txbFather").value = k;
}
//-->
</script>
我这样写取不到值,是空的啊
#12
var keyparams = document.getElementById("<%=txbFather.ClientID%>");
var k = window.showModalDialog("PopKeywords.aspx?ks=<%=System.Web.HttpContext.Current.Server.UrlEncode(keyparams.value) %>", window, "dialogWidth:800px;status:no;dialogHeight:700px");
我这样写了,但还是不行
#13
最好的方法是加个隐藏域。赋给这个隐藏域就OK。我经常这样写
#14
啊,加载就这要读出来啊。那应该行不通了,url传参吧。
#15
9楼告诉你了,你视而不见
#16
9楼的+1
#17
9楼的回复:
---------------------------------------
把你要传递的值放入url,而不是argument
然后
string getFatherValue = this.Request[key].toString();
--------------------------------------------
我已经这样做了,但是也碰到问题
---------------------------------------
把你要传递的值放入url,而不是argument
然后
string getFatherValue = this.Request[key].toString();
--------------------------------------------
我已经这样做了,但是也碰到问题
<script type="text/javascript" language="javascript">
<!--
function openChild() {
var k = window.showModalDialog("PopKeywords.aspx?ks=<%=System.Web.HttpContext.Current.Server.UrlEncode(TextBox1.Text) %>", window, "dialogWidth:800px;status:no;dialogHeight:700px");
//var k = window.showModalDialog("PopKeywords.aspx?" + (new Date()).valueOf(), window, "dialogWidth:500px;status:no;dialogHeight:650px")
if (k != null)
document.getElementById("txbFather").value = k;
}
//-->
</script>
我这样写取不到值,是空的啊
#18
js写到txbFather控件下面
#19
我把 js 写到了 那个 textbox 下面了,但还是 url 传递过来的是空值
#20
<tr>
<td height="30" bgcolor="#CAD2F4" align="left"> 关键字选择</td>
<td colspan="5" bgcolor="#FFFFFF" align="left">
<asp:TextBox ID="txbFather" class="inputtext" runat="server" Width="430px" onclick="openChild()"></asp:TextBox>
</td>
</tr>
<script type="text/javascript" language="javascript">
<!--
function openChild() {
var k = window.showModalDialog("PopKeywords.aspx?ks=<%=System.Web.HttpContext.Current.Server.UrlEncode(txbFather.Text) %>", window, "dialogWidth:800px;status:no;dialogHeight:700px");
//var k = window.showModalDialog("PopKeywords.aspx?" + (new Date()).valueOf(), window, "dialogWidth:500px;status:no;dialogHeight:650px")
if (k != null)
document.getElementById("txbFather").value = k;
}
//-->
</script>
我这样写了,但还是不行
#21
嘿嘿,起初我就想到了,楼主试试撒
#22
看我17 楼的,我已经做 url 了,但还有问题
#23
+1
#24
方法有很多种,你要是在服务器端的到,可以这样
Father.aspx
Child1.aspx
Child.aspx
使用frameset而不是使用base target=_self可以解决浏览器兼容性问题。
另外,如果使用js传递,可以传clientID
另外,你要明白代码的执行顺序,js代码是后执行的,服务器端代码是先执行的,js代码还没执行,你怎么等在服务器端得到呢?
Father.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function openChild(txt) {
k = window.showModalDialog("Child1.aspx?txt=" + encodeURIComponent(txt.value));
}
</script>
</head>
<body>
<form id="form1" runat="server">
<table>
<tr>
<td height="30" bgcolor="#CAD2F4" align="left">
关键字选择
</td>
<td colspan="5" bgcolor="#FFFFFF" align="left">
<asp:TextBox ID="txbFather" class="inputtext" runat="server" Width="430px" onclick="openChild(this)"></asp:TextBox>
</td>
</tr>
</table>
</form>
</body>
</html>
Child1.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<frameset rows="0,*" border="0" frameborder="0">
<frame src=""></frame>
<frame src="Child.aspx?txt=<%=Server.UrlEncode(Request.QueryString["txt"]) %>"></frame>
</frameset>
</html>
Child.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
txbChild.Text = Request.QueryString["txt"];
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="txbChild" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
</form>
</body>
</html>
使用frameset而不是使用base target=_self可以解决浏览器兼容性问题。
另外,如果使用js传递,可以传clientID
另外,你要明白代码的执行顺序,js代码是后执行的,服务器端代码是先执行的,js代码还没执行,你怎么等在服务器端得到呢?
#25
搞清楚楼上说的asp.net页面生命周期基本概念。
服务器是接受浏览器端请求,然后经过几乎整个生命周期,最终通过Render方法输出了html,这个html被浏览器接收到,才在窗口里显示出网页,以后才有所谓的javascript代码执行。
#26
不管你的js放在设计页面的上面还是下面,就算是“放出花来”,它也不可能在服务器端执行。等它在浏览器端执行时,服务器端当前页面实例对象别说什么代码都不执行,就是自身也早已经被GC销毁了。
#27
这会是楼主想要的
#28
如果你自己没有找对思路,那么退而求其次重新从设计角度改变自己的思路做起才是“正着”。如果一门心思只等要别人给你一个代码,就容易钻到死胡同里边出不来了。
#29
谢过各位技术前辈!!
更感谢net_lover (【孟子E章】) 真正的为我解决实际问题!不多说,就是一个字:打心里感动加感激!呵
更感谢net_lover (【孟子E章】) 真正的为我解决实际问题!不多说,就是一个字:打心里感动加感激!呵