有框架页a.aspx,内有两个页面:b.aspx,c.aspx结构如下图:
________________________________________
| | ----->a.aspx
| b.aspx |
|_______________________________________|
| |
| c.aspx |
| |
|_______________________________________|
有main.js,内有函数
function ShowModalDialog()
{
var argsArray = new Array("1","mydialog");//此处的"1"是要传递的参数,"mydialog"为要显示的对话框的标题
window.showModalDialog("d.htm",argsArray,"dialogWidth:800px;dialogHeight:600px;status:no;")
}
在a.aspx中加入对main.js的引用:
<script language="javascript" src="main.js">
在b.aspx中有一按钮,有onclick事件为onclick="top.ShowModalDialog()"
当点击这个按钮时,就会在ModalDialog中显示d.htm
d.htm的代码为:
<html>
<head>
<title></title>
<script language="javascript">
var argsArray = window.dialogArguments;
document.title = argsArray[1];
function LoadPages()
{
window.ShowPages.location = "e.aspx?id=" + argsArray[0];
}
</script>
</head>
<body onLoad="LoadPages()">
<div align="center">
<iframe id="ShowPages" name="ShowPages" scrolling="no" frameborder="0" width="800" height="600"></iframe>
</div>
</body>
</html>
当d.htm加载时,会设置它的页面中的一个iframe的路径为e.aspx
e.aspx也是一个框架页,包含子框架f.aspx和g.aspx
结构如下:
________________________________________
| | ----->e.aspx
| f.aspx |
|_______________________________________|
| |
| g.aspx |
| |
|_______________________________________|
好了,说了这么多,大家可能还不知道我到底要干什么呢。
其实我的目的很简单,f.aspx中有一个服务器端button,我想在button_click事件中得到ShowModalDialog()函数中的"1"
如下:
private void btOk_Click(object sender, System.EventArgs e)
{
Response.Write("<script>alert('" + 要得到的参数:"1" + "');</script>");
}
我试了N种办法,
首先是Session。
我在e.aspx的Page_Load函数中写了Session["ID"]=Request.QueryString["id"] //注:这里的Session肯定存在,我测试了的
然后我想在f.aspx中的btOk_Click()函数中获取这个Session,但是什么也得不到。
Session不行,就用Cookie,结果也不行,得不到。
更奇怪的是:
我在b.aspx、e.aspx、f.aspx三个页面的Page_Load函数里都写了这句话:
Response.Write("<script>alert('" + Session.SessionID + "');</script>");
结果大家猜怎么着?三次alert的Session居然完全不同!如果说b.aspx与e.aspx不同还情有可原,但是f.aspx是e.aspx的一个iframe,为什么它们的Session也不同呢?
我现在是一点脾气也没有了,实在是弄不明白。
请教大家:我这个参数到底应该怎么传递?
小弟在这里先谢过各位了!
9 个解决方案
#1
在D.html中
window.onload时
接收到模态窗口传过来的参数
然后把location 重新定向到 e.aspx?para=" + 参数
然后
在e.aspx中
<frame src="f.aspx?para=<%=Request.QueryString["para"]!= null?Request.QueryString["para"].ToString():""%>"">
...
window.onload时
接收到模态窗口传过来的参数
然后把location 重新定向到 e.aspx?para=" + 参数
然后
在e.aspx中
<frame src="f.aspx?para=<%=Request.QueryString["para"]!= null?Request.QueryString["para"].ToString():""%>"">
...
#2
一直在.cs文件中写代码,把这个都忘了。谢谢提醒,我先试试
#3
这个问题已经解决了
那为什么三个页面会出现三个不同SessionID呢?
那为什么三个页面会出现三个不同SessionID呢?
#4
e跟f 的sessionid应该是一样的
b和ef因为有弹出窗口,可能存在不一样的问题
b和ef因为有弹出窗口,可能存在不一样的问题
#5
同意楼上的!
#6
可能是我用了一个大文件上传组件的原因,居然出现了同一个页面里有两个SessionID的情况,Page_Load里是一个,button_Click里却是完全不同的另一个。
而且有下面的情况:
Page_Load()
{
Session["temp"] = 2;
}
button_Click()
{
Response.Write(Session["temp"].ToString());
}
--------------这样可以成功
但如果这样写就报错,说未将对象引用到实例:
Page_Load()
{
Session["temp"] = Request.QueryString["temp"];
//这里的Request.QueryString["temp"]的值是2,我验证过了的。而且Session["temp"]也已经有了值,是2,这肯定没错。但是到button_Click()函数中的时候,这个Session就莫名其妙的没了。
//而且比如这里的SessionID和button_Click()里的SessionID不一样
}
button_Click()
{
Response.Write(Session["temp"].ToString());
}
---------------------------------
总之,今天我见了鬼了
---------------------------------
下班了,明天接着讨论
而且有下面的情况:
Page_Load()
{
Session["temp"] = 2;
}
button_Click()
{
Response.Write(Session["temp"].ToString());
}
--------------这样可以成功
但如果这样写就报错,说未将对象引用到实例:
Page_Load()
{
Session["temp"] = Request.QueryString["temp"];
//这里的Request.QueryString["temp"]的值是2,我验证过了的。而且Session["temp"]也已经有了值,是2,这肯定没错。但是到button_Click()函数中的时候,这个Session就莫名其妙的没了。
//而且比如这里的SessionID和button_Click()里的SessionID不一样
}
button_Click()
{
Response.Write(Session["temp"].ToString());
}
---------------------------------
总之,今天我见了鬼了
---------------------------------
下班了,明天接着讨论
#7
用window.showModalDialog弹出窗体A,然后又在A上用window.open打开窗体B
那么B中的Session值会丢失,这是IE的BUG
那么B中的Session值会丢失,这是IE的BUG
#8
也可能是我的IE出了问题,反正这两天点是真够背的
#9
现在我在a.aspx上用window.showModalDialog("a.htm",args,options)打开对话框,a.htm上有一iframe,onload的时候设置iframe的location为b.aspx,在b.aspx中居然得不到a.aspx中声明的Session。在我的机子上是这样,但是到同事的机子上打开就没事。肯定是我的IE坏了,但是又不知道该怎么修复啊?除了重装系统,还有别的办法吗?
#1
在D.html中
window.onload时
接收到模态窗口传过来的参数
然后把location 重新定向到 e.aspx?para=" + 参数
然后
在e.aspx中
<frame src="f.aspx?para=<%=Request.QueryString["para"]!= null?Request.QueryString["para"].ToString():""%>"">
...
window.onload时
接收到模态窗口传过来的参数
然后把location 重新定向到 e.aspx?para=" + 参数
然后
在e.aspx中
<frame src="f.aspx?para=<%=Request.QueryString["para"]!= null?Request.QueryString["para"].ToString():""%>"">
...
#2
一直在.cs文件中写代码,把这个都忘了。谢谢提醒,我先试试
#3
这个问题已经解决了
那为什么三个页面会出现三个不同SessionID呢?
那为什么三个页面会出现三个不同SessionID呢?
#4
e跟f 的sessionid应该是一样的
b和ef因为有弹出窗口,可能存在不一样的问题
b和ef因为有弹出窗口,可能存在不一样的问题
#5
同意楼上的!
#6
可能是我用了一个大文件上传组件的原因,居然出现了同一个页面里有两个SessionID的情况,Page_Load里是一个,button_Click里却是完全不同的另一个。
而且有下面的情况:
Page_Load()
{
Session["temp"] = 2;
}
button_Click()
{
Response.Write(Session["temp"].ToString());
}
--------------这样可以成功
但如果这样写就报错,说未将对象引用到实例:
Page_Load()
{
Session["temp"] = Request.QueryString["temp"];
//这里的Request.QueryString["temp"]的值是2,我验证过了的。而且Session["temp"]也已经有了值,是2,这肯定没错。但是到button_Click()函数中的时候,这个Session就莫名其妙的没了。
//而且比如这里的SessionID和button_Click()里的SessionID不一样
}
button_Click()
{
Response.Write(Session["temp"].ToString());
}
---------------------------------
总之,今天我见了鬼了
---------------------------------
下班了,明天接着讨论
而且有下面的情况:
Page_Load()
{
Session["temp"] = 2;
}
button_Click()
{
Response.Write(Session["temp"].ToString());
}
--------------这样可以成功
但如果这样写就报错,说未将对象引用到实例:
Page_Load()
{
Session["temp"] = Request.QueryString["temp"];
//这里的Request.QueryString["temp"]的值是2,我验证过了的。而且Session["temp"]也已经有了值,是2,这肯定没错。但是到button_Click()函数中的时候,这个Session就莫名其妙的没了。
//而且比如这里的SessionID和button_Click()里的SessionID不一样
}
button_Click()
{
Response.Write(Session["temp"].ToString());
}
---------------------------------
总之,今天我见了鬼了
---------------------------------
下班了,明天接着讨论
#7
用window.showModalDialog弹出窗体A,然后又在A上用window.open打开窗体B
那么B中的Session值会丢失,这是IE的BUG
那么B中的Session值会丢失,这是IE的BUG
#8
也可能是我的IE出了问题,反正这两天点是真够背的
#9
现在我在a.aspx上用window.showModalDialog("a.htm",args,options)打开对话框,a.htm上有一iframe,onload的时候设置iframe的location为b.aspx,在b.aspx中居然得不到a.aspx中声明的Session。在我的机子上是这样,但是到同事的机子上打开就没事。肯定是我的IE坏了,但是又不知道该怎么修复啊?除了重装系统,还有别的办法吗?