Gridview HTML行ID错误地创建

时间:2008-12-19 17:41:44

标签: c# asp.net gridview

所有

当我的gridview绑定到其数据源(以编程方式设置)并生成HTML时,行ID将在HTML中显示为每行相同...即它们不是唯一的。我期待这个:

<select name="ctl00$ContentHolder$list$ctl03$EquipmentTypeList" id="ctl00_ContentHolder_list_ctl03_EquipmentTypeList" style="width:160px;">

即。 id包含用于唯一标识行的ctl03 ......但是......当我在标准下拉列表的位置使用用户控件时,我得到了这个:

<select name="ctl00$ContentHolder$flbShipFrom$ddlAvailableOptions" onchange="StoreSelection('ctl00_ContentHolder_flbShipFrom_ddlAvailableOptions'); setTimeout('__doPostBack(\'ctl00$ContentHolder$flbShipFrom$ddlAvailableOptions\',\'\')', 0)"  id="ctl00_ContentHolder_flbShipFrom_ddlAvailableOptions" style="width:283px;" />

即。 ID不包含唯一的行号。对于同一行中的标准.NET控件也会出现这种情况:

每当我尝试按ID访问数据时,我都会得到错误的信息,而且看起来,gridview的viewstate没有正确重新生成,因为文本框等会在重新提交的页面上丢失值。

完全卡住......请提出任何建议

1 个答案:

答案 0 :(得分:1)

确保您用于生成行的任何内容实现INamingContainer。

关于ViewState问题,它可能是这种情况的症状,或者可能是您生成行的方式。如果命名容器没有帮助,请发布服务器端代码。

另外,尽量避免直接使用客户端ID?在大多数情况下,如果你真的需要点击一个精确的控件,你可以使用FindControl(服务器端)或将ClientID的结果传递给你的Javascript(客户端)。通常,最好不要直接引用HTML ID,尤其是因为您已经找到了嵌套命名问题。