现在的位置: 首页 > 综合 > 正文

从子窗体传递数据给父窗体

2012年11月27日 ⁄ 综合 ⁄ 共 3610字 ⁄ 字号 评论关闭
 弹出窗口刷新它的父页面后。出现不重新发送信息,则无法刷新网页 2005-09-29 13:49 黄玮璘

很简单的解决方法
在.NET里头
默认有POSTBACK的控件存在
当页面回传的时候
后台会根据postback的内容进行操作
这样
我们可以从IE浏览器中调看这个回传代码
是一个叫__dopostback(..,..)的方法
<script language="javascript" type="text/javascript">
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
theform = document.Form1;
}
else {
theform = document.forms["Form1"];
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</script>的脚本
所以从父窗体打开新窗体的时候
新窗体都会返回一个值
叫做window.returnValue
利用这样的特性
我是这么解决的:
1)修改窗体更改与刷新的注意点:
1.父窗体一定要
有三处修改:
第一:页面加载时候的脚本写入
PCMS.cla.page.sc.page_postback_register(this.Page);
第二:postback的判断

else
{
//PCMS.cla.page.sc.page_c_win_openPageclose_returnvalue("pleasefresh");
if(Request.Form["__eventargument"]!=null)
{
if(Request.Form["__eventargument"].ToString()=="pleasefresh")
{
this.databind(true);
}
}
}
第三:打开页面的调用(调整窗体大小)
PCMS.cla.page.sc.page_f_win_opendialog_returnvalue(this.Page,"l02_dialog_Check_Car_M.aspx?intemp="+e.Item.Cells[0].Text,800,750);
2.子窗体一定在关闭的时候:
PCMS.cla.page.sc.page_c_win_openPageclose_returnvalue(this.Page,"pleasefresh");
3.在类库中进行的代码书写:
/// <summary>
/// 页面执行页面刷新的返回服务器端传送信号的JAVASCRIPT函数
/// </summary>
/// <param name="page">镶嵌javascript代码的页面名</param>
/// <returns></returns>
public static void page_postback_register(System.Web.UI.Page page)
{
string javascriptpostback="<script language=\"javascript\" type=\"text/javascript\">"+
"function ___doPostBack(eventTarget, eventArgument) "+
"{"+
"var theform;"+
"if (window.navigator.appName.toLowerCase().indexOf(\"microsoft\") > -1) "+
"{"+
"theform = document.Form1;"+
"}"+
"else "+
"{"+
"theform = document.forms[\"Form1\"];"+
"}"+
"theform.__EVENTTARGET.value = eventTarget.split(\"$\").join(\":\");"+
"theform.__EVENTARGUMENT.value = eventArgument;"+
"theform.submit();"+
"}"+
"</script>";
page.RegisterClientScriptBlock("PostbackServer",javascriptpostback);
}
/// <summary>
/// 和___PostBack一起同时使用,用在一个页面上
/// 父亲窗体通过Request.From["__eventargument"].ToString()获取子窗体关闭时候提供的ReturnValue值
/// </summary>
/// <param name="page">要执行的页面对象</param>
/// <param name="URL">要打开的页面地址</param>
/// <param name="width">宽</param>
/// <param name="height">高</param>
public static void page_f_win_opendialog_returnvalue(System.Web.UI.Page page,string URL,int width,int height)
{
//Response.Write(System.Web.HttpUtility.HtmlEncode("你 %^&*% 好"));
string js2="<script language=\"JavaScript\">";
js2+=string.Format("res=window.showModalDialog(\"{0}\",window,\"status:false;dialogWidth:{1}px;dialogHeight:{2}px\");___doPostBack('Form1',res);",URL,width.ToString(),height.ToString());
js2+="</script>";
page.RegisterClientScriptBlock("can",js2);
}
/// <summary>
/// 窗体关闭返回给父窗体事件,父亲窗体通过Request.From["__eventargument"].ToString()获取ReturnValue值
/// </summary>
/// <param name="page">子窗体页面对象</param>
/// <param name="ReturnValue">返回给父窗体的值</param>
public static void page_c_win_openPageclose_returnvalue(System.Web.UI.Page page,string ReturnValue)
{
page.RegisterStartupScript("return",string.Format("<script>window.returnValue=\""+ReturnValue+"\";window.close();</script>"));
}
这样就很容易解决了

  回复  更多评论   

# re: 弹出窗口刷新它的父页面后。出现不重新发送信息,则无法刷新网页 2005-09-29 13:54 黄玮璘

上面有地方省略了些代码
这些代码页面加载时的判断:
if(this.Page.IsPostBack==false)
{
//第一次加载页面的时候在这里运行代码
}
else
{
//不是第一次登录页面时候在这里运行代码
//通过判断postback的参数进行代码调整
if(Request.Form["__eventargument"]!=null)
{
if(Request.Form["__eventargument"].ToString()=="pleasefresh")
{
//重新调整数据的函数调用,自己定义
this.databind(true);
}
}  回复  更多评论   

# re: 弹出窗口刷新它的父页面后。出现不重新发送信息,则无法刷新网页 2005-09-29 14:00 黄玮璘

我这里有一个涉及真正要刷新的问题
同一个页面下面
我有一个image控件
当我按下一个按钮的时候
我要随机指定一张jpg图片然后压缩成gif文件
这个gif文件叫b.gif
我要这个image控件在每次按钮事件结束后绑定一个叫b.gif的图片
显示即时的图片
但是IE的缓存使得任何的加载方式都不能显示更新后的b.gif
除非IE浏览器关闭否则无法看到更新后的b.gif文件
请问诸位有没有高招帮我这个忙?

抱歉!评论已关闭.