日期:2014-05-18  浏览次数:20437 次

showModalDialog关闭刷新父页面的问题
我的父页面Default.aspx里由函数 
function OpenWin(ID) {
   
  var strUrl = "ProductUpdate.aspx?ID=" + ID;
  var returnValues1 = window.showModalDialog(strUrl, window, "resizable=no;dialogWidth:750px;dialogHeight:650px;status:no;help:no;");
  if (returnValues1 == "ok") {
  window.location.href = window.location.href;
  }
  return false;
  }


 后台用 Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", "<script>OpenWin(" + id + ")</script>"); 打开子窗口ProductUpdate.aspx
在子窗口ProductUpdate.aspx后台更新之后
  Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", "<script>alert('更新成功');window.returnValues1=\"ok\";window.close();</script>");
但是父窗口ProductUpdate.aspx没有刷新。请问我该怎么做?



------解决方案--------------------

1.父窗体部分(页面)

把btEdit_Click的后台代码去掉!

function CheckAndOpenWin()
{
var iSelectedCount = 0;
var itemID='';
$('#<%=GridView1.ClientID %>').find('input').each(function(){

if($(this).attr('type')=='checkbox' && $(this).is(':checked'))
{
iSelectedCount++;
itemID=$(this).parent().attr('ItemID');
}

});

if(iSelectedCount==0)
{
alert('请选择一个项编辑');
return false;
}

if(iSelectedCount>1)
{
alert('一次只能编辑一个项');
return false;
}

var strUrl = "ProductUpdate.aspx?ID=" + itemID;
var returnValues1 = window.showModalDialog(strUrl, window, "resizable=no;dialogWidth:750px;dialogHeight:650px;status:no;help:no;");
if (returnValues1 != null) {
return true;
}
return false;
 
}

<asp:Button ID="btEdit" runat="server" OnClientClick="return CheckAndOpenWin();" />


2.父窗体部分(后台代码)

父页面中btEdit按钮不需要有任何的后台代码
绑定GridView的代码放到Page_OnPreRender中去

GridView的RowDataBound事件中写入如下代码
if(e.Row.RowType==DataControlRowType.DataRow)
{
DataRowView drv = e.Row.DataItem As DataRowView;//假定你绑定的是DataTable
CheckBox Checkbox = e.Row.FindControl("Checkbox") As CheckBox;
Checkbox.Attributes.Add("ItemID",drv["ID"].ToString());
}

3. 子窗体页面
弹出的子窗体的页面部分加一句javascript
window.returnValue=null;

4. 子窗体后台代码
子窗体后台代码当保存完毕并关闭时写入的后台代码应当为:
Page.ClientScript.RegisterStartupScript(this.GetType(),"returnValue","window.returnValue='ok';window.close();",true);