2011-05-27 64 views
0

我在asp.net中的web應用程序中遇到了小問題。 我收到下面的錯誤:DomEvent。 AddHandler

錯誤:Sys.InvalidOperationException:未通過Sys.UI.DomEvent.addHandler方法添加處理程序。

我已經使用UpdatePanel,並且當我嘗試非常快速地執行2-3個操作時會發生此錯誤。 當我下次嘗試採取一些行動時,我的web應用程序就會啓動。 請建議。 謝謝

回答

1

我已經解決了將ScriptManager的ScriptMode屬性設置爲釋放而不是調試的問題 默認情況下,ScriptManager設置爲調試模式。

1

在我的情況下,這是由於在Modal Popup的更新面板中具有'Close'控件引起的。我通過在MPE創造更新面板之外的「虛擬」按鈕,將其設置爲「CancelControlID」固定它的屬性:

<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'fix',在那裏引用了一個虛擬按鈕,因此忽略了TargetControlID屬性。

0

我有同樣的問題,並通過在更新面板中放置ModalPopupExtender或使用ModalPopupExtender的用戶控件解決。

0

從哪個方面來看待它,這個問題是繼承於我認爲是AJAX中的錯誤

我能解決這個問題的唯一辦法就是控制你的上,你控制或者更具體地說刷新的UpdatePanel以確保該ModalPopup一直保持可見沿着服務器端排序尋呼

錯誤的原因實際上是因爲一旦您在UpdatePanel內部的GridView上進行了一些頁面更改,控件就會「丟失」到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> 

上面的代碼中的主要觀點是,我有一個很深 GridView的一個UpdatePanel,這是一個ModalPopUp內內。

現在看看我有什麼說的GridView裏面:

OnPageIndexChanging 

OnSorted 

在GridView裏面,還有一個ModalPopup和文本框。忽略這一點。只有這樣,用戶才能將學生的聯繫人日誌中的評論看作另一個彈出窗口。

所以,如果我們現在去後面的代碼爲上述兩個事件:

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去表演!

+0

哦,並確保您的Master Page上有EnablePartialRendering =「true」 – Fandango68 2016-10-06 02:50:38