在 RadLightBox 中的 RadLightBoxItem 标签内查找 RadGrid 的客户端 ID

Finding the Client ID for a RadGrid inside a RadLightBoxItem tag in a RadLightBox

我正在尝试使用 JavaScript 从客户端获取 RadGrid 控件的 ClientID,以便我能够从客户端将数据绑定到此。

RadGrid 存在于 RadLightBox 中,需要在按钮单击事件中填充。 LightBox 的标记看起来像这样。

<telerik:RadLightBox ID="RadLightBox1" runat="server">
    <Items>
        <telerik:RadLightBoxItem runat="server">
            <ItemTemplate>
                <telerik:RadGrid runat="server" ID="lightbox_radgrid" AutoGenerateColumns="false">
                    <MasterTableView>
                        <Columns>
                            <%-- Columns not shown here --%>
                        </Columns>
                    </MasterTableView>
                    <ClientSettings>
                        <ClientEvents OnCommand="window_radgrid_OnCommand" />
                    </ClientSettings>
                    <GroupingSettings CaseSensitive="false" ShowUnGroupButton="true" />
                </telerik:RadGrid>
            </ItemTemplate>
        </telerik:RadLightBoxItem>
    </Items>
</telerik:RadLightBox>

这是我编写的Javascript部分代码。我能够找到 RadLIghtBoxItem 元素,但无法获取 RadGrid 及其 clientID。此方法将在对 return 数据的 Web 服务调用成功时执行。

function onSucessCallThis(result, userContext, methodName) {
            var radWindow = $find('<%= lightbox.ClientID %>');
            var LightBoxItems = radWindow.get_items();
            console.log(LightBoxItems);
            console.log(LightBoxItems.get_count());
            var item = LightBoxItems.getItem(0);
            console.log(item); //Able to fetch LightBoxItem
            var radGrid = item.FindControl("lightbox_radgrid"); //Doesn't work
        }

我不确定这是否是在 radLightBox 中放置 radGrid 的正确方法。这个网上例子不多

我认为您使用 RadWindow's ContentTemplate 会更容易。类似于:

        <telerik:RadWindow ID="RadWindow1" runat="server" Modal="true">
            <ContentTemplate>
                <telerik:RadGrid ID="RadGrid1" runat="server"></telerik:RadGrid>
            </ContentTemplate>
        </telerik:RadWindow>
        <script>
            function onSucessCallThis(result, userContext, methodName) {
                var wnd = $find("<%=RadWindow1.ClientID%>");
                if (!wnd.isVisible()) {
                    wnd.show();
                }
                var grid = $find("<%=RadGrid1.ClientID%>");
                var mtv = grid.get_masterTableView();
                mtv.set_dataSource(result);
                mtv.dataBind();
            }
        </script>

如果您想继续使用灯箱,请查看 Get Client-side Reference to a Control Object 文章。要点是您可以轻松地遍历 DOM,例如:

        <telerik:RadLightBox ID="RadLightBox1" runat="server">
            <Items>
                <telerik:RadLightBoxItem runat="server">
                    <ItemTemplate>
                        <telerik:RadGrid CssClass="gridInLightbox" runat="server" ID="lightbox_radgrid" AutoGenerateColumns="false">

                        </telerik:RadGrid>
                    </ItemTemplate>
                </telerik:RadLightBoxItem>
            </Items>
        </telerik:RadLightBox>
        <script>
            function onSucessCallThis(result, userContext, methodName) {
                var lightbox = $find('<%= RadLightBox1.ClientID %>');

                //item objects do not refer the DOM so we can use the lightbox as a parent for the traversal
                var radGrid = $telerik.$(".gridInLightbox", lightbox.get_element())[0].control;//of course, add defensive checks
                alert(radGrid);
                var mtv = radGrid.get_masterTableView();
                mtv.set_dataSource(result);
                mtv.dataBind();
            }
        </script>