我有一个gridview格式为:
<div>
<table>
<thead>
<tr><th></th></tr>
</thead>
<tbody>
<tr><td></td></tr>
</tbody>
</table>
</div>
我们的gridview / row等子类为每行添加一个id
row.ID = "item" + row.DataItemIndex.ToString();
row.ClientIDMode = Predictable;
但是当它被呈现到页面时,行中控件的ClientID
中没有此id。
<TABLE>
<TBODY>
<TR id="MainContent_mygridview">
<TD>
<SPAN id="MainContent_mygridview_label1_0">This is on page one</SPAN>
</TD>
</TR>
<TR id="MainContent_mygridview">
<TD>
<SPAN id="MainContent_mygridview_label1_1">This is on page one</SPAN>
</TD>
</TR>
</TBODY>
<TBODY>
<TR id="MainContent_mygridview">
<TD>
<SPAN id="MainContent_mygridview_label1_0">This is on page two</SPAN>
</TD>
</TR>
<TR id="MainContent_mygridview">
<TD>
<SPAN id="MainContent_mygridview_label1_1">This is on page two</SPAN>
</TD>
</TR>
</TBODY>
</TABLE>
这成为一个问题,因为我在页面上有一些ajax,在请求时获取下一个“页面”值的行并将它们添加到gridview(作为额外的tbody
)。这会导致DOM中ID的冲突。
答案 0 :(得分:1)
所以在挖掘之后我发现Predictable id使用了DisplayIndex
的{{1}}属性。
GridViewRow
也是我的子类:
int System.Web.UI.IDataItemContainer.DisplayIndex
{
get
{
return this.DataItemIndex;
}
}
我不确定为什么子类需要它,因为系统gridviewrow已经实现了该接口,所以也许其他人可以添加到这个。
此外,我不确定这是否会破坏其他任何内容。
但现在元素得到一个以其DataItemIndex结尾的id,这使得它们在整个数据集中是唯一的,而不仅仅是“页面”。