使用ClientID获取的ID和最终HTML中的ID不一样是怎么回事?

happyw2004 2011-08-10 09:14:21
我在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>
...全文
394 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
h_gxi 2013-09-18
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
可以这样去理解,Created的时候只是创建了Item,还没有把它放入ListView呢。
受教了!ItemDataBound事件中,怎么不执行InsertItem呢?想取InsertItemTemplate模板里的控件ID该怎么办呢?
happyw2004 2011-08-26
  • 打赏
  • 举报
回复
据说是VS2010的BUG,传智的那个教程上讲的。
  • 打赏
  • 举报
回复
可以这样去理解,Created的时候只是创建了Item,还没有把它放入ListView呢。
  • 打赏
  • 举报
回复
你搞错(在生命期中的)位置了。应该在ItemDataBound事件中去处理这个,而不是ItemCreated。
javaoraspx 2011-08-10
  • 打赏
  • 举报
回复
vs10 和08 的区别 其中一个就是这个
子夜__ 2011-08-10
  • 打赏
  • 举报
回复
3.5 和4.0 的 clientid不一样
dalmeeme 2011-08-10
  • 打赏
  • 举报
回复
这里有些参考文章,你看下:
参考大全
dalmeeme 2011-08-10
  • 打赏
  • 举报
回复
asp.net 4.0中控件有一个ClientMode的新属性,可能该属性的值设为Inherit(继承)了,你可以参看这篇文章:
http://www.cnblogs.com/worksguo/archive/2009/09/04/1560222.html
happyw2004 2011-08-10
  • 打赏
  • 举报
回复
谢谢 ,我使用的是VS2010 .NET4.0出现了上面的问题,我把.NET切换到3.5,他出来的CLIENTID就对了。不知为何?
dalmeeme 2011-08-10
  • 打赏
  • 举报
回复
复合控件内的控件ClientID的命名大概就是这样的,会自动加上父控件名ListView1。你知道它的命名规则就好办了。自己拼一下:ListView1.ClientID+"_"+logoUrltextBox.ClientID

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧