所有
当我的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没有正确重新生成,因为文本框等会在重新提交的页面上丢失值。
完全卡住......请提出任何建议
答案 0 :(得分:1)
确保您用于生成行的任何内容实现INamingContainer。
关于ViewState问题,它可能是这种情况的症状,或者可能是您生成行的方式。如果命名容器没有帮助,请发布服务器端代码。
另外,尽量避免直接使用客户端ID?在大多数情况下,如果你真的需要点击一个精确的控件,你可以使用FindControl(服务器端)或将ClientID的结果传递给你的Javascript(客户端)。通常,最好不要直接引用HTML ID,尤其是因为您已经找到了嵌套命名问题。