asp.net GridView Row的id在Predictable ClientIDMode中不会更改控件clientid

时间:2011-09-08 00:21:52

标签: c# asp.net gridview

我有一个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的冲突。

1 个答案:

答案 0 :(得分:1)

所以在挖掘之后我发现Predictable id使用了DisplayIndex的{​​{1}}属性。

GridViewRow

也是我的子类:

int System.Web.UI.IDataItemContainer.DisplayIndex
{
    get
    {
        return this.DataItemIndex;
    }
}

我不确定为什么子类需要它,因为系统gridviewrow已经实现了该接口,所以也许其他人可以添加到这个。
此外,我不确定这是否会破坏其他任何内容。

但现在元素得到一个以其DataItemIndex结尾的id,这使得它们在整个数据集中是唯一的,而不仅仅是“页面”。