如何从后台代码中运行Telerik RadWindow

7

我试图从代码后台运行Telerik Rad窗口,但我遇到了一些问题。我不知道是否重要,但我正在尝试从Rad Grid中编辑模式下单击的按钮中运行Rad窗口。

RadWindow window1 = new RadWindow();
window1.NavigateUrl = "http://www.google.com";
window1.VisibleOnPageLoad = true;
window1.ID = "RadWindow1";
window1.Width = 500;
window1.Height = 300;
window1.VisibleOnPageLoad = true;    
rwm_WindowManager.Windows.Add(window1);

页面上还有RadAjaxManagerrwm_WindowManager,我将它们放在了RadAjaxPanel中。
问题是这个rad窗口从未显示出来。没有错误提示,但也没有出现rad窗口。


你能展示一下带有RadAjaxPanel和WindowManager的代码吗?也许这个Panel根本就看不见。你确定点击按钮时显示的代码被调用了吗? - slfan
请问您能否尝试将RadAjaxPanel更改为普通的asp:Panel,并检查RadWindow是否显示出来? - Jakub Linhart
3个回答

3
 <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
    </telerik:RadAjaxManager>
    <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server">
        <telerik:RadWindowManager ID="RadWindowManager1" runat="server">
        </telerik:RadWindowManager>
        <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource"
            OnItemCommand="RadGrid1_ItemCommand">
            <MasterTableView DataKeyNames="ID">
                <Columns>
                    <telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID">
                    </telerik:GridBoundColumn>
                    <telerik:GridTemplateColumn>
                        <ItemTemplate>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:Button ID="Button1" Text="Open window" CommandName="OpenWindow" runat="server" />
                        </EditItemTemplate>
                    </telerik:GridTemplateColumn>
                    <telerik:GridEditCommandColumn>
                    </telerik:GridEditCommandColumn>
                </Columns>
            </MasterTableView>
        </telerik:RadGrid>
    </telerik:RadAjaxPanel>

........................

 protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    dynamic data = new[] {
            new { ID = "1", Name ="Name11",ParentID = "0"},
            new { ID = "2", Name ="Name11",ParentID = "0"},
            new { ID = "3", Name ="Name11",ParentID = "0"},
            new { ID = "4", Name ="Name11",ParentID = "0"}
        };
    RadGrid1.DataSource = data;
}
protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == "OpenWindow")
    {
        //RadWindowManager
        RadWindow window1 = new RadWindow();
        window1.NavigateUrl = "http://www.google.com";
        window1.VisibleOnPageLoad = true;
        window1.ID = "RadWindow1";
        window1.Width = 500;
        window1.Height = 300;
        RadWindowManager1.Windows.Add(window1);

    }
}

将您的RadWindowManager放置在RadAjaxPanel内。

非常感谢。我的问题是我忽略了RadAjaxManager(只有RadAjaxPanel)。考虑一个带有RadAjaxPanel的用户控件,我想从中打开一个RadWindow,并且该控件在许多页面上使用。每个页面可以包含许多这样的控件,但一个页面只能包含一个RadWindowManager。是否可能实现这种情况? - Jakub Linhart
如果省略RadWindowManager,直接将RadWindow添加到RadAjaxPanel中,一切都正常工作。我不明白。 - Jakub Linhart

1

我刚遇到过类似的问题,我是这样解决的:

RadAjaxManager.GetCurrent(Page).ResponseScripts.Add(String.Format("$find('{0}').show();", window1.ClientID));

我的应用程序使用RadAjax,这使得VisibleOnPageLoad属性存在问题,因此我完全避免使用它。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接