我有一个使用带有内容页面和用户控件的 MasterPage 的应用程序。在一个用户控件中,我们有另一个用户控件(我知道,这是一种 Inception 类型的东西)。此用户控件使用 RadAjaxManagerProxy 并具有生成 RadWindow 的控件。一切正常:窗口显示一些 RadGrid,其中填充了数据库中的字段,然后我关闭窗口。
所有这些都是通过
RadWindow1.VisibleOnPageLoad = true
在某些服务器端事件中完成的。关闭窗口后,我无法设置 RadWindow1.VisibleOnPageLoad = false;
,因此当我单击另一个触发 AJAX 事件的控件(在本例中显示不同的 RadWindow)时,之前的 RadWindow 会弹出。
在应用程序的其他部分,我们通过 RadWindow 的 OnClientClose 方法将参数传递给服务器,我们用该方法调用 RadAjaxManager 的服务器端 OnAjaxRequest 事件。这会触发服务器端事件,我可以设置属性,如下所示:
JS:
function WindowClose(sender, args) {
SendRequest("ArgumentName");
}
function SendRequest(requestName) {
var ajaxManager = $find("<%= RadAjaxManagerMain.ClientID %>");
ajaxManager.ajaxRequest(requestName);
}
C#:
protected void RadAjaxManagerMain_AjaxRequest(object sender, AjaxRequestEventArgs args)
{
if (args.Argument == "ArgumentName")
{
RadWindow1.VisibleOnPageLoad = false;
}
}
但是由于我使用的是 RadAjaxManagerProxy,因此不支持 RadAjaxManager 的 OnAjaxRequest 方法。
我为此提出了一些选择:
或者也许有一些我不知道或没有想到的完全不同的东西。我对任何选择都持开放态度。我已经有一个在关闭窗口时触发的 Javascript 方法,我只是想不出一种方法可以让窗口保持关闭而不进行完整的回发。
如何防止我的 RadWindow 在另一个 AJAX 请求上打开?
刚刚找到解决方案。它就在我面前。在 RadWindowManager 上设置
EnableViewState="false"
可防止此问题发生。很简单。希望它对将来的人有所帮助。
我使用了所有可能的方法来解决这个问题,但这帮助我解决了我的问题。