2009-12-30 115 views
0

我有一個用戶控件,我做了,並將該控件的兩個實例放在同一頁...當我與第一個控件交互時,它更新了元素(使用ajax)的第一個用戶控件,因爲它應該。但是當我對第二個userControl做同樣的事情時,它會更新第一個userControl上的元素而不是它本身!這很奇怪,因爲沒有任何東西被聲明爲共享的,它看起來像一個實例化問題。ASP.NET UserControl幫助

每個userControl都包裝在自己的ajax更新面板中。

任何想法的人?這是一個常見的陷阱?

這是我的代碼的結構

<@ Control Language="VB" ClassName="AgeRange"> 
<@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="AjaxCT"> 

<script runat="server"> 

Delegate Sub NumberClickedEventHandler(ByVal sender As Object, ByVal e As EventArgs) 
Public Event NumberClicked As NumberClickedEventHandler 

Public Class NumberClickedEventArgs 
      ' EVENT ARGS CLASS 

End Class 


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
     ' PAGE LOAD STUFF HERE 

End Sub 

Public Property A FEW PROPERTIES HERE 

Protected Function GetHTML(ByRef lastNumber As Byte, Optional ByVal FromNo As Byte = 18, 
      Optional ByVal bForPopDown As Boolean = False, Optional ByVal bForPopUp As Boolean = False) As String 

     SOME CODE HERE 
End Sub 

-

<asp:UpdatePanel ID="upAgeRange" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional" ClientIDMode="Static" 
<ContentTemplate> 
    <table><tr> 
     <td> 

      <span id="spanPopUp" runat="server"> 
      </span> 
      <div id="dPanel" runat="server"> 
      </div> 
      <span id="spanPopDown" runat="server"> 
      </span> 
     </td> 
    </tr> 
    </table> 

    <AjaxCT:HoverMenuExtender ID="hmeUp" runat="server" TargetControlID="dPanel" PopupControlID="spanPopUp" OffsetY="-200"> 
    </AjaxCT:HoverMenuExtender> 

    <AjaxCT:HoverMenuExtender ID="hmeDown" runat="server" TargetControlID="dPanel" PopupControlID="spanPopDown" OffsetY="60"> 
    </AjaxCT:HoverMenuExtender> 
</ContentTemplate> 
</asp:UpdatePanel> 
+0

您如何定位控件進行更新?你在使用FindControl嗎? – Eilon 2009-12-30 22:00:59

+0

@ERX_VB ....您能否通過解釋或示例代碼澄清這是客戶端還是服務器端問題? – griegs 2009-12-30 22:10:38

+0

這是一個服務器問題,GetHTML在服務器上完成,它使用服務器上的.InnerHTML屬性更新runat = server span/div控件...更新總是在UserControl1上發生,而不是在aspx頁面上的UserControl2上發生包含此用戶控件的兩個實例 – 2009-12-30 22:16:57

回答

0

假設這是一個客戶端問題,而不是服務器端。

您需要確保兩個控件都有唯一的名稱。

我的偏好是把這些控件放在一個<div>中,它有一個唯一的類名。

<div class="Ctrl1"><div class="ctrl2">

那麼我就可以實際的類我感興趣中使用的FindControl。

喜歡的東西$('.Ctrl2').findControl ....

+0

這是使用jQuery的客戶端JavaScript。我相信原始海報的問題是在ASP.NET UpdatePanel中使用服務器端代碼。 – Eilon 2009-12-30 22:05:54

+0

你可能是對的,但我認爲在AJAX調用返回時,海報試圖更新控制客戶端。 – griegs 2009-12-30 22:07:30

+0

啊好點。我認爲我們需要一些關於該場景的更多信息,例如代碼示例和頁面結構。 – Eilon 2009-12-30 22:09:31

1

您目前在更新面板使用ClientIDMode="Static"控制。這意味着生成的HTML將具有重複的ID。自動生成的更新面板的客戶端代碼需要具有不同的ID,以便它可以找到放置更新的正確HTML元素。您可能根本不需要ClientIDMode="Static"