C# ASP.NET用户控件帮助

C# ASP.NET用户控件帮助,c#,asp.net,ajax,user-controls,updatepanel,C#,Asp.net,Ajax,User Controls,Updatepanel,我有一个我制作的用户控件,我将该控件的两个实例放在同一页上。。。当我与第一个控件交互时,它会更新第一个userControl的元素(使用ajax),这是应该的。但是当我对第二个userControl做同样的事情时,它会更新第一个userControl上的元素,而不是它本身!!!这真的很奇怪,因为没有任何东西被声明为共享的,而且看起来像是一个实例化问题 每个用户控件都围绕其自己的ajax updatepanel进行包装 有什么想法吗?这是一个常见的陷阱吗 这是我代码的结构 <@ Contro

我有一个我制作的用户控件,我将该控件的两个实例放在同一页上。。。当我与第一个控件交互时,它会更新第一个userControl的元素(使用ajax),这是应该的。但是当我对第二个userControl做同样的事情时,它会更新第一个userControl上的元素,而不是它本身!!!这真的很奇怪,因为没有任何东西被声明为共享的,而且看起来像是一个实例化问题

每个用户控件都围绕其自己的ajax updatepanel进行包装

有什么想法吗?这是一个常见的陷阱吗

这是我代码的结构

<@ 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

委托子编号ClickedEventHandler(ByVal sender作为对象,ByVal e作为事件参数)
公共活动编号被称为NumberClickedEventHandler
公共类编号ICKEDEVENTARGS
'事件参数类
末级
受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)
“在这里加载页面内容
端接头
公共财产这里有一些财产
受保护的函数GetHTML(ByRef lastNumber作为字节,可选ByVal FromNo作为字节=18,
可选的ByVal bForPopUp作为Boolean=False,可选的ByVal bForPopUp作为Boolean=False)作为字符串
这里有一些代码
端接头
--


假设这是客户端问题而不是服务器端问题

您需要确保两个控件都有唯一的名称

我更喜欢将这些控件放置在具有唯一类名的

然后我可以在我感兴趣的实际类中使用findControl


类似于
$('.Ctrl2').findControl

您当前正在更新面板控件中使用
clientdmode=“Static”
。这意味着生成的HTML将具有重复的ID。为更新面板自动生成的客户端代码需要有不同的ID,这样才能找到放置更新的正确HTML元素


您可能根本不需要这个
clientmode=“Static”

您如何定位要更新的控件?您正在使用FindControl吗?@ERX\u VB。。。。请您通过解释或示例代码澄清这是客户端问题还是服务器端问题?这是服务器问题,GetHTML在服务器上完成,它使用服务器上的.InnerHTML属性更新runat=server span/div控件。。。更新总是发生在UserControl1上,而不是包含此UserControl2的两个实例的aspx页面上的UserControl2。这是在jQuery中使用客户端JavaScript。我相信原始海报的问题是在ASP.NET UpdatePanel中使用服务器端代码。你可能是对的,但我认为这意味着在返回AJAX调用时,海报试图更新控件客户端。这一点很好。我想我们需要一些关于场景的更多信息,比如代码示例和页面结构。我正在服务器端进行所有更新。。。真的很奇怪,我用asp.net在UserControl中创建了所有包含对象的完全独立的实例。此外,我用页面代码结构的更多信息更新/编辑了我的原始帖子。可能是因为我使用静态名称调用了updatePanel。。。函数SubmitAge(age){$get('HiddenAge')。value=age;uu doPostBack('upAgeRange');}
<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>