Microsoft JScript运行时错误:rowcontextmenu中的“document.getElementById(...)”错误

时间:2010-07-02 15:28:03

标签: javascript telerik

我在radgrid中使用rowcontextmenu。我是使用telerik提供的演示完成的。当我右键单击radgrid行时,我收到类似Microsoft JScript运行时错误的错误:'document.getElementById(...)'为null或不是对象。我不是导致这个错误的原因。任何人都可以帮我解决这个错误。

由于

               <script>
        function RowContextMenu(sender, eventArgs) {
            var menu = $find("<%=RadMenu1.ClientID %>");
            var evt = eventArgs.get_domEvent();

            if (evt.target.tagName == "INPUT" || evt.target.tagName == "A") {
                return;
            }

            var index = eventArgs.get_itemIndexHierarchical();
            document.getElementById("radGridClickedRowIndex").value = index;

            sender.get_masterTableView().selectItem(sender.get_masterTableView().get_dataItems()[index].get_element(), true);

            menu.show(evt);

            evt.cancelBubble = true;
            evt.returnValue = false;

            if (evt.stopPropagation) {
                evt.stopPropagation();
                evt.preventDefault();
            }
        }

    </script>

<table style="width: 98%">
        <tr>
            <td colspan="2">
                <asp:Label runat="server" Font-Bold="true" Font-Size="14pt" ID="lblTskName"></asp:Label>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
                </telerik:RadScriptManager>
                <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
                    <ClientEvents OnRequestStart="onRequestStart" />
                    <AjaxSettings>
                        <telerik:AjaxSetting AjaxControlID="rg200">
                            <UpdatedControls>
                                <telerik:AjaxUpdatedControl ControlID="rg200" LoadingPanelID="RadAjaxLoadingPanel1" />
                                <telerik:AjaxUpdatedControl ControlID="RadMenu1" />
                            </UpdatedControls>
                        </telerik:AjaxSetting>
                        <telerik:AjaxSetting AjaxControlID="RadMenu1">
                            <UpdatedControls>
                                <telerik:AjaxUpdatedControl ControlID="rg200" LoadingPanelID="RadAjaxLoadingPanel1" />
                                <telerik:AjaxUpdatedControl ControlID="RadMenu1" />
                            </UpdatedControls>
                        </telerik:AjaxSetting>
                    </AjaxSettings>
                </telerik:RadAjaxManager>
                <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default">
                </telerik:RadAjaxLoadingPanel>
                <telerik:RadGrid ID="rg200" runat="server" AutoGenerateColumns="False" PageSize="30"
                    Height="550px" OnNeedDataSource="rg200_NeedDataSource" Width="100%" AllowPaging="True"
                    AllowSorting="True" AllowMultiRowSelection="True" EnableHeaderContextMenu="True"
                    GridLines="None" EnableHeaderContextFilterMenu="True" AllowMultiRowEdit="True"
                    AllowFilteringByColumn="True" OnPreRender="rg200_PreRender" OnItemCreated="rg200_ItemCreated"
                    EnableViewState="False" OnUpdateCommand="rg200_UpdateCommand" AllowAutomaticDeletes="true"
                    AllowAutomaticInserts="true" AllowAutomaticUpdates="true">
                    <HeaderStyle Height="20px" BackColor="#004000" Font-Size="8pt" Font-Bold="True" ForeColor="White"
                        HorizontalAlign="Center" BorderColor="White" BorderWidth="1px" />
                    <ExportSettings IgnorePaging="true" ExportOnlyData="true">
                        <Pdf AllowModify="false" AllowPrinting="true" PageBottomMargin="" PageFooterMargin=""
                            PageHeaderMargin="" PageHeight="11in" PageLeftMargin="" PageRightMargin="" PageTopMargin=""
                            PageWidth="14in" />
                    </ExportSettings>
                    <MasterTableView GridLines="None" DataKeyNames="orderId" CommandItemDisplay="Top"
                        EditMode="InPlace">
                        <CommandItemSettings ShowExportToWordButton="true" ShowExportToExcelButton="true"
                            ShowExportToCsvButton="true" ShowExportToPdfButton="true" ShowAddNewRecordButton="false" />
                        <Columns>
                            <telerik:GridClientSelectColumn UniqueName="ClientSelectColumn" HeaderStyle-Width="3%"
                                ItemStyle-Width="3%">
                                <HeaderStyle Width="3%"></HeaderStyle>
                                <ItemStyle Width="3%"></ItemStyle>
                            </telerik:GridClientSelectColumn>
                            <telerik:GridBoundColumn UniqueName="sId" HeaderText="sId" DataField="sId" ReadOnly="true"
                                Visible="false">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="orderId" HeaderText="orderId" ReadOnly="true"
                                Visible="false" DataField="orderId">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="Customer Name" HeaderText="Customer Name" DataField="Customer Name"
                                ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="Market Name" HeaderText="Market Name" DataField="Market Name"
                                ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="LOB" HeaderText="LOB" DataField="LOB" ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="Headend Name" HeaderText="Headend Name" DataField="Headend Name"
                                ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="Project Name" HeaderText="Project Name" DataField="Project Name"
                                ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="Site Name" HeaderText="Site Name" DataField="Site Name"
                                ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="Task Status" HeaderText="Task Status" DataField="Task Status"
                                ReadOnly="true">
                            </telerik:GridBoundColumn>
                            <%--<telerik:GridTemplateColumn UniqueName="Clarify Account Nbr" HeaderText="Clarify Account Nbr"
                                DataField="Clarify Account Nbr">
                                <ItemTemplate>
                                    <asp:Label ID="lblClarifyAccountNbr" Text='<%# Eval("Clarify Account Nbr") %>' runat="server"></asp:Label>
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:TextBox ID="txtClarifyAccountNbr" Text='<%# Eval("Clarify Account Nbr") %>'
                                        runat="server"></asp:TextBox>
                                </EditItemTemplate>
                            </telerik:GridTemplateColumn>--%>
                            <telerik:GridBoundColumn UniqueName="Clarify Account Nbr" HeaderText="Clarify Account Nbr"
                                DataField="Clarify Account Nbr">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="Site ID" HeaderText="Site ID" DataField="Site ID">
                            </telerik:GridBoundColumn>
                            <telerik:GridBoundColumn UniqueName="Quote ID" HeaderText="Quote ID" DataField="Quote ID">
                            </telerik:GridBoundColumn>
                            <telerik:GridCheckBoxColumn UniqueName="EDP Created?" HeaderText="EDP Created?" DataField="EDP Created?">
                            </telerik:GridCheckBoxColumn>
                            <telerik:GridEditCommandColumn UniqueName="EditCommandColumn" Visible="false">
                            </telerik:GridEditCommandColumn>
                        </Columns>
                    </MasterTableView>
                    <ClientSettings EnableRowHoverStyle="true" ReorderColumnsOnClient="false" AllowDragToGroup="false"
                        AllowColumnsReorder="True">
                        <Scrolling AllowScroll="true" EnableVirtualScrollPaging="false" UseStaticHeaders="true" />
                        <Selecting AllowRowSelect="True"></Selecting>
                        <Resizing AllowRowResize="true" AllowColumnResize="True" EnableRealTimeResize="True"
                            ResizeGridOnColumnResize="False"></Resizing>
                        <ClientEvents OnRowContextMenu="RowContextMenu"></ClientEvents>
                    </ClientSettings>
                    <PagerStyle Mode="NextPrevAndNumeric" AlwaysVisible="true"></PagerStyle>
                </telerik:RadGrid>
                <telerik:RadContextMenu ID="RadMenu1" runat="server" OnItemClick="RadMenu1_ItemClick"
                    EnableRoundedCorners="true" EnableShadows="true">
                    <Items>
                        <telerik:RadMenuItem Text="Edit Task" />
                        <telerik:RadMenuItem Text="Complete Task" />
                    </Items>
                </telerik:RadContextMenu>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                &nbsp;
            </td>
        </tr>
    </table>

代码隐藏

    protected void rg200_PreRender(object sender, EventArgs e)
{
    rg200.MasterTableView.GetColumnSafe("RowIndicator").Display = false;

    if (rg200.EditIndexes.Count > 0 || rg200.MasterTableView.IsItemInserted)
    {
        GridColumn col1 = rg200.MasterTableView.GetColumn("EditCommandColumn") as GridColumn;
        col1.Visible = true;
    }
    else
    {
        GridColumn col2 = rg200.MasterTableView.GetColumn("EditCommandColumn") as GridColumn;
        col2.Visible = false;
    } 

}

protected void RadMenu1_ItemClick(object sender, RadMenuEventArgs e)
{
    int radGridClickedRowIndex;

    radGridClickedRowIndex = Convert.ToInt32(Request.Form["radGridClickedRowIndex"]);

    switch (e.Item.Text)
    {
        case "Edit Task":
            rg200.Items[radGridClickedRowIndex].Edit = true;
            break;
        case "Complete Task":
            rg200.MasterTableView.PerformDelete(rg200.Items[radGridClickedRowIndex]);
            break;
    }
}

2 个答案:

答案 0 :(得分:1)

我没有尝试过这个例子,但我不认为radGridClickedRowIndex是一个DOM元素。

您只能对HTML元素使用document.getElementById。

另一个想法......在ASPX世界中,当编译页面时,服务器端控件的名称通常与ID字段中的名称不同。如果是这种情况,您可以尝试这样做: document.getElementByID('&lt;%= radGridClickedRowIndex.ClientID&gt;');

在你的情况下,我很确定radGridClickedRowIndex不是DOM元素。

答案 1 :(得分:1)

Script标记后使用您的Table标记,您的问题将自动解决。