[英]ASP.NET UserControl Help
我有一个用户控件,并将该控件的两个实例放在同一页上...当我与第一个控件交互时,它会按需更新第一个userControl的元素(使用Ajax)。 但是当我对第二个userControl做同样的事情时,它会更新第一个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
-
<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>
您当前在更新面板控件中使用ClientIDMode="Static"
。 这意味着生成的HTML将具有重复的ID。 自动为更新面板生成的客户端代码需要具有不同的ID,以便它可以找到用于放置更新的正确HTML元素。
您可能根本不需要ClientIDMode="Static"
。
假设这是客户端问题,而不是服务器端问题。
您需要确保两个控件都具有唯一的名称。
我的偏好是将这些控件放在具有唯一类名的<div>
中。
<div class="Ctrl1">
<div class="ctrl2">
和<div class="ctrl2">
然后,我可以在我感兴趣的实际类中使用findControl。
像$('.Ctrl2').findControl
....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.