一个子窗口刷新父窗口的问题

googlg 2014-10-10 02:36:48
一个子窗口刷新父窗口的问题:之前问过这个问题[ 之前问到这个问题:


现在在IE 8 上还是有出现这个情况



这个是通过父窗口中的Repeater 控件中的按钮生产的子窗口 代码。 这个在IE中没有问题
       ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "alert", "alert('保存成功!');", true);
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "refresh", "window.opener.location=window.opener.location;", true);
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "close", "window.close();", true);



用上面的代码 通过父窗口中一个普通HTML按钮生成的子窗口 在IE中 出现上面的问题呢。 换成:


ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "alert", "alert('提交成功!');", true);
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "refresh", "window.opener.location.reload();", true);// 刷新父窗口。
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "close", "window.close();", true);



在IE中 有时候 出现上面的问题,有时候没有,不知道怎么解决。
...全文
330 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
googlg 2014-10-11
  • 打赏
  • 举报
回复
引用 2 楼 FoxDave 的回复:
这是自带的机制,就是这样的,当你的客户端向服务器提交数据动作发生后,这个提交动作的状态会记录在当前会话里 浏览器刷新会重复这个提交动作
不是太清楚 为什么会出现这个问题? 是程序的逻辑问题,还是浏览器的兼容性问题,在chrome中就没有这个问题。
googlg 2014-10-11
  • 打赏
  • 举报
回复
引用 10 楼 lll_2630826323 的回复:
通过子窗口刷新父窗口示例 //加载数据库信息 private void Frm_Main_Load(object sender,EventArgs e) { string ConnString = "Data Source=WRET-MOSY688YVW\\MRGLL;DataBase=db_TomeOne;UID=sa;Pwd=;";//数据库连接字符串 string AdapterString = "select userID as 编号,userName as 姓名 ,phone as 电话,address as 住址 from tb_User";//用于查询的字符串 string IDString = "select userID from tb_User";//读取数据库中用户的ID编号字符串 ConnPubs = new SqlConnection(ConnString);//建立数据库连接 PubsAdapter = new SqlDataAdapter(AdapterString,ConnPubs);//创建PubsAdapter数据读取器 IDAdapter = new SqlDataAdapter(IDString,ConnPubs);//用于读取用户编号的读取器 PubsAdapter.Fill(PubsSet, "tb_User");//填充PubsSet数据集 IDAdapter.Fill(PubsSet,"ID");//填充PubsSet数据集 DataTable PubsTable = PubsSet.Tables["tb_User"];//将数据写入PubsTable表 IDTable = PubsSet.Tables["ID"];//将数据写入ID表 IDArray = new string[IDTable.Rows.Count];//为数组定义最大长度 dataGridView1.DataSource = PubsTable.DefaultView;//设置dataGridView1的数据源 for(int i = 0; i < IDTable.Rows.Count; i++) //循环遍历数据表中的每一行数据 { for(int j = 0; j < IDTable.Columns.Count; j++)//循环遍历数据表中的每一列数据 { IDArray[i] = IDTable.Rows[i][j].ToString(); //将数据表中的数据添加至一个一维数组 } }//CodeGo.net/ } //增加单一的FrmChild窗体 private void AddandDelete_Click(object sender,EventArgs e) { if(flag == false)//判断标识的值决定是否创建窗体 { CreateFrmChild();//创建子窗体 } for(int i = 0; i < this.dataGridView1.Controls.Count; i++)//循环遍历DataGridView控件上的控件集 { if(this.dataGridView1.Controls[i].Name.Equals(BabyWindow.Name))//当存在子窗体时 { flag = true;//改变标识Flag的值 break;//退出循环体 } } } //声明的变量 public static bool flag=false ;//标识是否创建新的子窗体 Frm_Child BabyWindow = new Frm_Child();//实例化一个子窗体 DataSet PubsSet = new DataSet(); //定义一个数据集对象 public static string[] IDArray; //声明一个一维字符串数组 public DataTable IDTable; //声明一个数据表对象 SqlDataAdapter IDAdapter; //声明一个数据读取器对象 SqlDataAdapter PubsAdapter; //声明一个数据读取器对象 SqlConnection ConnPubs; //声明一个数据库连接对象 SqlCommand PersonalInformation; //声明一个执行SQL语句的对象 //创建子窗体的CreateFrmChild方法 public void CreateFrmChild() { Frm_Child BabyWindow = new Frm_Child();//实例化一个子窗体 BabyWindow.MdiParent = this;//设置子窗体的父窗体为当前窗体 this.dataGridView1.Controls.Add(BabyWindow);//在DataGridView控件中添加子窗体 BabyWindow.UpdateDataGridView += new EventHandler(BabyWindow_UpdateDataGridView); BabyWindow.Show();//显示子窗体 } //添加窗体数据信息 void BabyWindow_UpdateDataGridView(object sender,EventArgs e) { if(Frm_Child.GlobalFlag == false) //当单击删除按钮时 { if(ConnPubs.State == ConnectionState.Closed) //当数据库处于断开状态时 { ConnPubs.Open(); //打开数据库的连接 } string AfreshString = "delete tb_User where userID=" + Frm_Child.DeleteID.Trim();//定义一个删除数据的字符串 PersonalInformation = new SqlCommand(AfreshString,ConnPubs); //执行删除数据库字段 PersonalInformation.ExecuteNonQuery(); //执行SQL语句并返回受影响的行数 ConnPubs.Close(); //关闭数据库 DisplayData(); //显示数据库更新后的内容 MessageBox.Show("数据删除成功!","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);//弹出删除数据成功的提示 } else { if(ConnPubs.State == ConnectionState.Closed) //当数据库处于关闭状态时 { ConnPubs.Open(); //打开数据库 } string InsertString = "insert into tb_User values('" + Frm_Child.idContent + "','" + Frm_Child.nameContent + "','" + Frm_Child.phoneContent + "','" + Frm_Child.addressContent + "')";//定义一个插入数据的字符串变量 PersonalInformation = new SqlCommand(InsertString,ConnPubs);//执行插入数据库字段 PersonalInformation.ExecuteNonQuery();//执行SQL语句并返回受影响的行数 ConnPubs.Close(); //关闭数据库 DisplayData(); //显示更新后的数据 MessageBox.Show("数据添加成功!","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);//弹出添加成功的提示信息 } } //用于读取数据库的DisplayData方法 public void DisplayData() { PubsSet.Clear(); string ConnString = "Data Source=WRET-MOSY688YVW\\MRGLL;DataBase=db_TomeOne;UID=sa;Pwd=;";//数据库连接字符串 ConnPubs = new SqlConnection(ConnString);//建立数据库连接 string DisplayString = "select userId as 编号,userName as 姓名 ,phone as 电话,address as 住址 from tb_User";//定义读取数据库的字段 SqlDataAdapter PersonalAdapter = new SqlDataAdapter(DisplayString,ConnPubs); //定义一个读取数据库数据的读取器 PersonalAdapter.Fill(PubsSet, "tb_User"); //向表DisplayTable中填充数据 dataGridView1.DataSource = PubsSet.Tables["tb_User"].DefaultView;//设定DataGridView控件的数据源 }
没有看到。
huaneramn 2014-10-11
  • 打赏
  • 举报
回复
没遇到过。。。。。。。。。。。。。。。。。。
lll_2630826323 2014-10-11
  • 打赏
  • 举报
回复
通过子窗口刷新父窗口示例 //加载数据库信息 private void Frm_Main_Load(object sender,EventArgs e) { string ConnString = "Data Source=WRET-MOSY688YVW\\MRGLL;DataBase=db_TomeOne;UID=sa;Pwd=;";//数据库连接字符串 string AdapterString = "select userID as 编号,userName as 姓名 ,phone as 电话,address as 住址 from tb_User";//用于查询的字符串 string IDString = "select userID from tb_User";//读取数据库中用户的ID编号字符串 ConnPubs = new SqlConnection(ConnString);//建立数据库连接 PubsAdapter = new SqlDataAdapter(AdapterString,ConnPubs);//创建PubsAdapter数据读取器 IDAdapter = new SqlDataAdapter(IDString,ConnPubs);//用于读取用户编号的读取器 PubsAdapter.Fill(PubsSet, "tb_User");//填充PubsSet数据集 IDAdapter.Fill(PubsSet,"ID");//填充PubsSet数据集 DataTable PubsTable = PubsSet.Tables["tb_User"];//将数据写入PubsTable表 IDTable = PubsSet.Tables["ID"];//将数据写入ID表 IDArray = new string[IDTable.Rows.Count];//为数组定义最大长度 dataGridView1.DataSource = PubsTable.DefaultView;//设置dataGridView1的数据源 for(int i = 0; i < IDTable.Rows.Count; i++) //循环遍历数据表中的每一行数据 { for(int j = 0; j < IDTable.Columns.Count; j++)//循环遍历数据表中的每一列数据 { IDArray[i] = IDTable.Rows[i][j].ToString(); //将数据表中的数据添加至一个一维数组 } }//CodeGo.net/ } //增加单一的FrmChild窗体 private void AddandDelete_Click(object sender,EventArgs e) { if(flag == false)//判断标识的值决定是否创建窗体 { CreateFrmChild();//创建子窗体 } for(int i = 0; i < this.dataGridView1.Controls.Count; i++)//循环遍历DataGridView控件上的控件集 { if(this.dataGridView1.Controls[i].Name.Equals(BabyWindow.Name))//当存在子窗体时 { flag = true;//改变标识Flag的值 break;//退出循环体 } } } //声明的变量 public static bool flag=false ;//标识是否创建新的子窗体 Frm_Child BabyWindow = new Frm_Child();//实例化一个子窗体 DataSet PubsSet = new DataSet(); //定义一个数据集对象 public static string[] IDArray; //声明一个一维字符串数组 public DataTable IDTable; //声明一个数据表对象 SqlDataAdapter IDAdapter; //声明一个数据读取器对象 SqlDataAdapter PubsAdapter; //声明一个数据读取器对象 SqlConnection ConnPubs; //声明一个数据库连接对象 SqlCommand PersonalInformation; //声明一个执行SQL语句的对象 //创建子窗体的CreateFrmChild方法 public void CreateFrmChild() { Frm_Child BabyWindow = new Frm_Child();//实例化一个子窗体 BabyWindow.MdiParent = this;//设置子窗体的父窗体为当前窗体 this.dataGridView1.Controls.Add(BabyWindow);//在DataGridView控件中添加子窗体 BabyWindow.UpdateDataGridView += new EventHandler(BabyWindow_UpdateDataGridView); BabyWindow.Show();//显示子窗体 } //添加窗体数据信息 void BabyWindow_UpdateDataGridView(object sender,EventArgs e) { if(Frm_Child.GlobalFlag == false) //当单击删除按钮时 { if(ConnPubs.State == ConnectionState.Closed) //当数据库处于断开状态时 { ConnPubs.Open(); //打开数据库的连接 } string AfreshString = "delete tb_User where userID=" + Frm_Child.DeleteID.Trim();//定义一个删除数据的字符串 PersonalInformation = new SqlCommand(AfreshString,ConnPubs); //执行删除数据库字段 PersonalInformation.ExecuteNonQuery(); //执行SQL语句并返回受影响的行数 ConnPubs.Close(); //关闭数据库 DisplayData(); //显示数据库更新后的内容 MessageBox.Show("数据删除成功!","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);//弹出删除数据成功的提示 } else { if(ConnPubs.State == ConnectionState.Closed) //当数据库处于关闭状态时 { ConnPubs.Open(); //打开数据库 } string InsertString = "insert into tb_User values('" + Frm_Child.idContent + "','" + Frm_Child.nameContent + "','" + Frm_Child.phoneContent + "','" + Frm_Child.addressContent + "')";//定义一个插入数据的字符串变量 PersonalInformation = new SqlCommand(InsertString,ConnPubs);//执行插入数据库字段 PersonalInformation.ExecuteNonQuery();//执行SQL语句并返回受影响的行数 ConnPubs.Close(); //关闭数据库 DisplayData(); //显示更新后的数据 MessageBox.Show("数据添加成功!","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);//弹出添加成功的提示信息 } } //用于读取数据库的DisplayData方法 public void DisplayData() { PubsSet.Clear(); string ConnString = "Data Source=WRET-MOSY688YVW\\MRGLL;DataBase=db_TomeOne;UID=sa;Pwd=;";//数据库连接字符串 ConnPubs = new SqlConnection(ConnString);//建立数据库连接 string DisplayString = "select userId as 编号,userName as 姓名 ,phone as 电话,address as 住址 from tb_User";//定义读取数据库的字段 SqlDataAdapter PersonalAdapter = new SqlDataAdapter(DisplayString,ConnPubs); //定义一个读取数据库数据的读取器 PersonalAdapter.Fill(PubsSet, "tb_User"); //向表DisplayTable中填充数据 dataGridView1.DataSource = PubsSet.Tables["tb_User"].DefaultView;//设定DataGridView控件的数据源 }
myhope88 2014-10-11
  • 打赏
  • 举报
回复
会有浏览器兼容性问题吧
Justin-Liu 2014-10-11
  • 打赏
  • 举报
回复
引用 7 楼 googlg 的回复:
[quote=引用 6 楼 FoxDave 的回复:] [quote=引用 4 楼 googlg 的回复:] [quote=引用 2 楼 FoxDave 的回复:] 这是自带的机制,就是这样的,当你的客户端向服务器提交数据动作发生后,这个提交动作的状态会记录在当前会话里 浏览器刷新会重复这个提交动作
我是通过子窗口添加的项目,添加完后需要刷新父窗口,将新添加的项目 显示到父窗口的 repeater 上, 如果总是出现这样窗口,怎么办??[/quote] 子窗体关闭刷新父窗体的时候弹这个信息? 你父窗体打开子窗体的时候父窗体是不会请求服务器的啊[/quote]您的意思是 在子窗口销毁前,父窗口已经回发了,??我单击Repeater 控件中的按钮生产的子窗口 不会出现这个问题。但是单击Repeater控件中的按钮应该是触发回发和服务器交互的啊? 这个是创建 子窗口的 哪个按钮。
<li><a href="#" onclick="javascript:window.open('PTAdd.aspx','','height=300, width=900,left='+(screen.availWidth-600)/2+',top='+(screen.availHeight-300)/2+',status=yes,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes')" ><div class="addinfo"></div><span style=" height:18px" onmouseover="mover(this)"  onmouseout="mout(this)">新建</span></a></li>
[/quote] 我有点儿不明白你描述的东西 你可以把这个抛开,尝试用另一种方式再试试先
googlg 2014-10-10
  • 打赏
  • 举报
回复
引用 6 楼 FoxDave 的回复:
[quote=引用 4 楼 googlg 的回复:] [quote=引用 2 楼 FoxDave 的回复:] 这是自带的机制,就是这样的,当你的客户端向服务器提交数据动作发生后,这个提交动作的状态会记录在当前会话里 浏览器刷新会重复这个提交动作
我是通过子窗口添加的项目,添加完后需要刷新父窗口,将新添加的项目 显示到父窗口的 repeater 上, 如果总是出现这样窗口,怎么办??[/quote] 子窗体关闭刷新父窗体的时候弹这个信息? 你父窗体打开子窗体的时候父窗体是不会请求服务器的啊[/quote]您的意思是 在子窗口销毁前,父窗口已经回发了,??我单击Repeater 控件中的按钮生产的子窗口 不会出现这个问题。但是单击Repeater控件中的按钮应该是触发回发和服务器交互的啊? 这个是创建 子窗口的 哪个按钮。
<li><a href="#" onclick="javascript:window.open('PTAdd.aspx','','height=300, width=900,left='+(screen.availWidth-600)/2+',top='+(screen.availHeight-300)/2+',status=yes,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes')" ><div class="addinfo"></div><span style=" height:18px" onmouseover="mover(this)"  onmouseout="mout(this)">新建</span></a></li>
Justin-Liu 2014-10-10
  • 打赏
  • 举报
回复
引用 4 楼 googlg 的回复:
[quote=引用 2 楼 FoxDave 的回复:] 这是自带的机制,就是这样的,当你的客户端向服务器提交数据动作发生后,这个提交动作的状态会记录在当前会话里 浏览器刷新会重复这个提交动作
我是通过子窗口添加的项目,添加完后需要刷新父窗口,将新添加的项目 显示到父窗口的 repeater 上, 如果总是出现这样窗口,怎么办??[/quote] 子窗体关闭刷新父窗体的时候弹这个信息? 你父窗体打开子窗体的时候父窗体是不会请求服务器的啊
googlg 2014-10-10
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
你为什么偏要 window.opener.location.reload() 呢?
用什么?
googlg 2014-10-10
  • 打赏
  • 举报
回复
引用 2 楼 FoxDave 的回复:
这是自带的机制,就是这样的,当你的客户端向服务器提交数据动作发生后,这个提交动作的状态会记录在当前会话里 浏览器刷新会重复这个提交动作
我是通过子窗口添加的项目,添加完后需要刷新父窗口,将新添加的项目 显示到父窗口的 repeater 上, 如果总是出现这样窗口,怎么办??
  • 打赏
  • 举报
回复
你为什么偏要 window.opener.location.reload() 呢?
Justin-Liu 2014-10-10
  • 打赏
  • 举报
回复
这是自带的机制,就是这样的,当你的客户端向服务器提交数据动作发生后,这个提交动作的状态会记录在当前会话里 浏览器刷新会重复这个提交动作
googlg 2014-10-10
  • 打赏
  • 举报
回复
问题:

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧