DomEvent。 AddHandler的

时间:2011-05-27 08:24:20

标签: asp.net asp.net-ajax

我在asp.net的web应用程序中遇到的问题很小。 我收到以下错误:

错误:Sys.InvalidOperationException:未通过Sys.UI.DomEvent.addHandler方法添加处理程序。

我使用过Updatepanel,当我尝试非常快速地执行2-3个操作时会发生此错误。 当我下次尝试做一些动作时,我的网络应用程序就挂断了。 请建议。 感谢

4 个答案:

答案 0 :(得分:1)

我已经解决了将ScriptManager的ScriptMode属性设置为Release而不是Debug的问题 默认情况下,ScriptManager设置为Debug模式。

答案 1 :(得分:1)

在我的情况下,这是因为关闭'模态弹出窗口中的更新面板中的控件。我通过创建一个“假”来修复它。更新面板外部的按钮,并将其设置为' CancelControlID'在MPE属性中:

<asp:Button ID="btnDummyCloseWindow" runat="server" Style="visibility: hidden"/>

<ajaxToolkit:ModalPopupExtender ID="mpeWindow" runat="server" PopupControlID="pnlWindow"
    TargetControlID="btnDummyOtherButton" BackgroundCssClass="modalBackground"
    DropShadow="false" CancelControlID="btnDummyCloseWindow" />

您需要确保更新面板中的关闭按钮已分配操作以关闭窗口(例如mpeWindow.hide())。

还值得注意的是,我也在使用TargetControlID&#39;修复&#39;同样,在引用虚拟按钮的地方,所以忽略那里的TargetControlID属性。

答案 2 :(得分:0)

我遇到了同样的问题,并通过将ModalPopupExtender或使用ModalPopupExtender的用户控件置于更新面板中来解决。

答案 3 :(得分:0)

您希望看到它的哪种方式,问题是继承我认为是AJAX中的错误

我能够解决此问题的唯一方法是控制您控制的服务器端的排序分页,或者更具体地说是刷新UpdatePanel < / strong>以及确保ModalPopup保持可见!

错误的原因实际上是因为一旦你在UpdatePanel内的GridView上进行了一种页面更改,控件就会丢失&#34;&#34;到UpdatePanel。

更好的解释是here

这是我的GridView中的一列...

    <asp:GridView ID="gvTETstudents" runat="server" AutoGenerateColumns="False" AllowSorting="True" CellPadding="4" ForeColor="#333333" Font-Size="Small" Width="100%"
      DataSourceID="sdsTETstudents" 
      OnRowCreated="gvTETstudents_RowCreated" 
      OnRowDataBound="gvTETstudents_RowDataBound" 
      OnDataBound="gvTETstudents_DataBound">
    <Columns>
        ..
        ..
        <ItemTemplate>
            <asp:UpdatePanel ID="upWEF1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="btnWEFCLOSE" />
                </Triggers>
                <ContentTemplate>
...
...
                    <asp:Panel ID="pnlWEF2" runat="server" style="display:none;">
                        <table><tr><td>
                        <asp:Button ID="btnWEFshow" runat="server" 
                            Text="ALL" 
                            Font-Size="Small" Font-Names="Arial" 
                            ToolTip="Click here to see all of this student's work experience feedback on file" />
                        <ajaxToolkit:ModalPopupExtender ID="mpeWEF" runat="server"
                            BackgroundCssClass="modalBackground"
                            OkControlID="btnWEFCLOSE"
                            PopupControlID="upWEF2"
                            TargetControlID="btnWEFshow">
                        </ajaxToolkit:ModalPopupExtender>
                        <asp:UpdatePanel ID="upWEF2" runat="server" UpdateMode="Conditional">
                            <ContentTemplate>
                                <asp:Panel ID="pnlWEF3" runat="server" CssClass="pnlEndorsed">
                                    <div id="Hdr" style="text-align: center">
                                        <asp:Label ID="lblWEFHdr" runat="server">** CONTACT LOG **</asp:Label>
                                    </div>
                                    <div id="Bdy">
                                        <table style="width:100%"><tr><td>
                                        <asp:GridView ID="gvWEFContactLog" runat="server" 
                                            Font-Size="X-Small" CellPadding="4" ForeColor="#333333" GridLines="None" AllowPaging="true" PageSize="8" AllowSorting="True" AutoGenerateColumns="False" Width="100%" 
                                            DataKeyNames="StudentContactLogID,Private,ApprenticeContactLogID"
                                            DataSourceID="sdsWEF"
                                            OnRowDataBound="gvWEFContactLog_RowDataBound"
                                            OnPageIndexChanging="gvWEFContactLog_PageIndexChanging" 
                                            OnSorted="gvWEFContactLog_Sorted">
                                            <Columns>
                                                <asp:TemplateField HeaderText="First Entered" SortExpression="FirstEntered">
                                                    <ItemTemplate>
                                                        <asp:HiddenField ID="hfWEFStudCLid" runat="server" Value='<%# Eval("StudentContactLogID") %>' />
                                                        <asp:HiddenField ID="hfWEFAppCLid" runat="server" Value='<%# Eval("ApprenticeContactLogID") %>' />
                                                        <asp:HiddenField ID="hfPrivate" runat="server" Value='<%# Eval("Private") %>' />
                                                        <asp:HiddenField ID="hfNotes" runat="server" Value='<%# Eval("ContactNotes") %>' />
                                                        <asp:LinkButton ID="lnkWEFCLOG" runat="server"
                                                            Text='<%# Eval("FirstEntered","{0:d MMM yyyy HH:mm}") %>'></asp:LinkButton>
                                                        <a id="lnkDummy" runat="server" visible=false></a>
                                                        <ajaxToolkit:ModalPopupExtender ID="mpeWEFCLOG" runat="server"
                                                            OkControlID="btnWEFCLOSEview"
                                                            PopupControlID="upWEFCLOG"
                                                            TargetControlID="lnkWEFCLOG">
                                                        </ajaxToolkit:ModalPopupExtender>
                                                        <asp:UpdatePanel ID="upWEFCLOG" runat="server" UpdateMode="Conditional">
                                                            <ContentTemplate>
                                                                <div id="pnlWEFCLOG" runat="server" class="pnlCLOG">
                                                                    <asp:TextBox ID="txtWEFCLOG" runat="server" 
                                                                        Wrap="true" 
                                                                        TextMode="MultiLine"
                                                                        Rows="10" 
                                                                        ReadOnly="true"
                                                                        Width="98%">
                                                                    </asp:TextBox>
                                                                    <br />
                                                                    <asp:Button ID="btnWEFCLOSEview" runat="server" Text="OK" Width="100%" />
                                                                </div>
                                                            </ContentTemplate>
                                                        </asp:UpdatePanel>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                <asp:BoundField DataField="Subject" HeaderText="Subject" SortExpression="Subject" />
                                                <asp:BoundField Visible="False" DataField="StudentContactLogID" HeaderText="LogID"
                                                    InsertVisible="False" ReadOnly="True" SortExpression="StudentContactLogID">
                                                    <ItemStyle HorizontalAlign="Center" />
                                                    <HeaderStyle HorizontalAlign="Center" />
                                                </asp:BoundField>
                                                <asp:BoundField DataField="StaffName" HeaderText="Staff" ReadOnly="True" SortExpression="StaffName" />
                                                <asp:TemplateField HeaderText="Contact Date Time" SortExpression="ContactDateTime">
                                                    <ItemTemplate>
                                                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ContactDateTime","{0:d MMM yyyy HH:mm}") %>'></asp:Label>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                <asp:TemplateField HeaderText="Follow-Up Date" SortExpression="FollowUpDate">
                                                    <ItemTemplate>
                                                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("FollowUpDate","{0:d MMM yyyy}") %>'></asp:Label>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                <asp:BoundField DataField="Private" HeaderText="Private" SortExpression="Private" />
                                            </Columns>
                                            <EmptyDataTemplate>
                                                No Current Entries
                                            </EmptyDataTemplate>
                                            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                                            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                                            <EditRowStyle BackColor="#999999" />
                                            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                                            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                                            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                                            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                                        </asp:GridView>
                                        <asp:SqlDataSource ID="sdsWEF" runat="server" ConnectionString="<%$ ConnectionStrings:ATCNTV1ConnectionString %>"
                                            SelectCommand="spTETStudentContactLogView" SelectCommandType="StoredProcedure">
                                            <SelectParameters>
                                                <asp:Parameter Name="StudentID" Type="string" />
                                                <asp:Parameter Name="WEF" Type="string" DefaultValue="%" />
                                            </SelectParameters>
                                        </asp:SqlDataSource>
                                        </td></tr>
                                        <tr style="text-align: center">
                                            <td style="text-align: left">
                                                <asp:Button ID="btnWEFCLOSE" runat="server" 
                                                    Text="CLOSE" 
                                                    CausesValidation="false" Font-Bold="True" Width="61px" />
                                            </td>
                                        </tr>
                                        </table>
                                    </div>
                                </asp:Panel>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                        </td></tr></table>
                    </asp:Panel>
                </ContentTemplate>
            </asp:UpdatePanel>
        </ItemTemplate>

上面代码的主要内容是我在UpdatePanel内部有一个非常深的GridView,它位于ModalPopUp中。

现在看看我在GridView中的内容:

OnPageIndexChanging

OnSorted

在GridView中,还有另一个ModalPopup和TextBox。忽略这一点。只有这样,用户才能将学生联系日志中的评论视为另一个弹出窗口。

因此,如果我们现在转到上述两个事件的代码:

protected void gvWEFContactLog_Sorted(object sender, EventArgs e)
{
    GridView gvWEFCL = (GridView)sender;
    GridViewRow gvRow = (GridViewRow)gvWEFCL.NamingContainer;

    UpdatePanel upWEF1 = (UpdatePanel)gvRow.FindControl("upWEF1");
    if (upWEF1 != null) upWEF1.Update();

    AjaxControlToolkit.ModalPopupExtender mpeWEF = (AjaxControlToolkit.ModalPopupExtender)gvRow.FindControl("mpeWEF");
    if (mpeWEF != null) mpeWEF.Show();
}

protected void gvWEFContactLog_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView gvWEFCL = (GridView)sender;
    GridViewRow gvRow = (GridViewRow)gvWEFCL.NamingContainer;

    UpdatePanel upWEF1 = (UpdatePanel)gvRow.FindControl("upWEF1");
    if (upWEF1 != null) upWEF1.Update();

    AjaxControlToolkit.ModalPopupExtender mpeWEF = (AjaxControlToolkit.ModalPopupExtender)gvRow.FindControl("mpeWEF");
    if (mpeWEF != null) mpeWEF.Show();
}

请注意,我实际上并没有控制排序或分页本身。我只是强制GridView调用主UpdatePanel(upWEF1)通过Update()调用刷新自己。下一步是抓住我希望保持可见的ModalPopup并重新显示它()它!

这就是它的全部内容!

我确信有一个更清洁的解决方案使用JavaScript本身,但对我来说,这避免了这个无意义的无意义错误,我有一套干净的弹出窗口和更新面板,可以处理热链接,排序和分页,因为我想要GridView执行!