Default2.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %>
<%@ Register Src="~/WebUserControl.ascx" TagPrefix="uc1" TagName="WebUserControl" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<div runat="server" id="myDiv">
<uc1:WebUserControl runat="server" ID="WebUserControl" />
</div>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
WebUserControl.ascx
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="WebUserControl.ascx.vb" Inherits="WebUserControl" %>
<asp:Label ID="myLabel" runat="server">你好</asp:Label>
这样生成的HTML代码是
<div id="Repeater1_myDiv_0">
<span id="Repeater1_WebUserControl_0_myLabel_0">你好</span>
</div>
<div id="Repeater1_myDiv_1">
<span id="Repeater1_WebUserControl_1_myLabel_1">你好</span>
</div>
我的ClientIDMode是Predictable,为什么span id的myLabel后面还会附加数字,如上面代码的粗体部分?
我觉得Repeater1_WebUserControl_0_myLabel和Repeater1_WebUserControl_1_myLabel已经可以区分了呀。
我发现这个后缀是Control.GetPredictableClientIDSuffix()添加的,但是为什么需要有这段代码?为什么在myLabel后面还需要添加父命名容器的DisplayIndex?能否给出一个例子,在不添加suffix时两个控件会有相同client id?