使用ClientID获取的ID和最终HTML中的ID不一样是怎么回事?
我在LISTVIEW的ItemCreated事件中为一个DropDownList添加onchange事件,传入另一个TextBox的CLIENTID,但是在客户端的HTML中查看,最终的ID和该CLIENTID不一致,获取到的ID是:ctrl2_logoURLTextBox,而最终的ID是:ListView1_ctrl2_logoURLTextBox,在前面多了一个LISTVIEW_,不知道是什么原因?具体的代码如下:
C#代码:
protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem || e.Item.ItemType == ListViewItemType.InsertItem)
{
DropDownList ddLinktype = (DropDownList)e.Item.FindControl("ddlLinkType");
TextBox logoUrltextBox = (TextBox)e.Item.FindControl("logoURLTextBox");
if (ddLinktype != null && logoUrltextBox !=null)
{
ddLinktype.Attributes["onchange"] = "onLinkTypeChange(this,'"+logoUrltextBox.ClientID+"')";
}
if (ddLinktype.SelectedValue == "Text")
{
if (logoUrltextBox != null) logoUrltextBox.Style["display"] = "none";
}
}
}
最终生成的HTML代码:
<td>
<select name="ListView1$ctrl2$ddlLinkType" id="ListView1_ctrl2_ddlLinkType" onchange="onLinkTypeChange(this,'ctrl2_logoURLTextBox')">
<option selected="selected" value="Text">文本</option>
<option value="Pic">图片</option>
</select>
</td>
<td>
<input name="ListView1$ctrl2$siteURLTextBox" type="text" id="ListView1_ctrl2_siteURLTextBox" /><span id="ListView1_ctrl2_RequiredFieldValidator3" style="color:Red;visibility:hidden;">*</span>
</td>
<td>
<input name="ListView1$ctrl2$logoURLTextBox" type="text" id="ListView1_ctrl2_logoURLTextBox" style="display:none;" />
</td>
</tr>
[解决办法]
复合控件内的控件ClientID的命名大概就是这样的,会自动加上父控件名ListView1。你知道它的命名规则就好办了。自己拼一下:ListView1.ClientID+"_"+logoUrltextBox.ClientID