从子窗体传递数据给父窗体
很簡單的解決方法
在.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文件
請問諸位有沒有高招幫我這個忙?
轉載于:https://www.cnblogs.com/huangweilin/archive/2007/04/27/730355.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的从子窗体传递数据给父窗体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF/WPFE笔记(一):准备工作
- 下一篇: 个人的web开发心得(八)-------