2015-04-03 73 views
0

我有2页:PageListAnimals和PageEditAnimal。从另一页呼叫事件

在PageListAnimals中,有一个带有动物信息的gridview。我可以点击每个动物来打开PageEditAnimal:在新窗口中打开另一个页面。

当我完成编辑动物信息时,我想保存并关闭窗口PageEditAnimal,之后,其他窗口PageListAnimals将被刷新,或者更新网格视图。

我知道JavaScript中存在解决方案,但我想实现它在服务器端。

我认为可能有像Observer模式这样的东西。当PageEditAnimal被关闭时,通知PageListAnimals更新自己。

请给我一些线索或帮助解决这个问题。

编辑 - 已解决:

解决的办法是打电话从孩子家长的刷新,但我只是设法做到这一点在JavaScript:

window.onbeforeunload = function() { 
     window.opener.refresh(); 
} 

然后在父, javascript函数方法()必须更新里面的gridview。

+0

Ajax是处理这个问题的最佳方法。另一个解决方案是在弹出窗口的关闭事件中刷新javascript中的浏览器。因为事件发生在客户端,所以你必须启动客户端。 – paqogomez 2015-04-03 15:10:31

+0

你也可以强制父母从孩子内部刷新,但是又一次。的JavaScript。 – paqogomez 2015-04-03 15:17:49

+0

有没有你的项目是“Web应用程序”或“网站”??? – Keval 2015-04-03 15:23:31

回答

0

为什么你需要打开另一个页面做编辑?

反而在同一页面中打开,并且在编辑完成后,重定向到PageListAnimals页面。

Response.Redirect("PageListAnimals.aspx"); 

如果硬要保持PageListAnimals开放的,那么我认为这样做是与JavaScript的唯一途径。只需创建一个对包含GridView.Databind()方法的服务器端函数的调用即可。

+0

这是这样的,我不能改变它。 PageEditAnimal必须成为新窗口 – dramixx 2015-04-08 09:22:29

0

你可以这样来做:

添加这个脚本在你的页面

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 
<script> 

    $(window).focus(function() { 
     document.getElementById('<%= Button3.ClientID %>').click(); 
    }); 
</script> 

的头部添加该按钮来调用后面的代码应该更新的GridView

<asp:Button ID="Button3" style="display:none"; runat="server" Text="Button" onclick="Button3_Click" /> 

而后面的代码应该如下所示:

protected void Button3_Click(object sender, EventArgs e) 
{ 
    //This is how your data should be bind in GridView 
    GridView1.DataBind(); //GridView1 -> name whatever your gridview is named 
} 

注意
每当你去PageListAnimals页面后,此代码调用,因此仔细使用它。

+0

当PageListAnimals集中时,将调用此代码。我只是希望在关闭其他窗口PageEditAnimal时更新她:/ – dramixx 2015-04-08 09:21:28

+0

是的,但是如果您转到该页面,则只能看到数据,如果这样做,页面将会有新数据。如果你不看它们,你不会刷新数据。 – Endri 2015-04-08 10:35:08