Как найти идентификатор клиента для элемента управления в ASP.NET GridView? - PullRequest
16 голосов
/ 15 июля 2009

У меня есть asp: GridView, который содержит asp: TextBox внутри TemplateField. Я хотел бы получить его идентификатор для использования в JavaScript. Примерно так:

<asp:TemplateField>
    <ItemTemplate>
        <asp:TextBox ID="textDateSent" runat="server" />
        <input type="button" value='Today' 
            onclick="setToday('<%# textDateSent.ClientID %>');" />
    </ItemTemplate>
</asp:TemplateField>

Но когда я компилирую, я получаю ошибку:

Имя textDateSent не существует в текущем контексте

Кто-нибудь знает, как получить идентификатор клиента этого TextBox?

Ответы [ 6 ]

30 голосов
/ 15 июля 2009

Попробуйте это:

<asp:TemplateField>
    <ItemTemplate>
        <asp:TextBox ID="textDateSent" runat="server">
        </asp:TextBox>                      
       <input type="button" value='Today' onclick="setToday('<%# ((GridViewRow)Container).FindControl("textDateSent").ClientID %>');" /> 
    </ItemTemplate>
</asp:TemplateField>
2 голосов
/ 15 июля 2009

Может быть, вы не хотите делать это там, где вам нужен ClientID. Прочтите этот пост здесь , где элементы управления в строке ссылаются универсальным образом.

1 голос
/ 28 июля 2015

Я просто делаю это ...

var tbl = document.getElementById('<%=GridView.ClientID%>');
var checkBox = tbl.rows[i].cells[11].getElementsByTagName("input")[0].id;

ячейка всегда должна быть одинаковой, и она отображается на входе. Возможно, вам придется изменить номер в конце, если у вас есть более одного ввода в этой ячейке. Это даст вам новый clientid / id объекта ввода (флажок или что-то еще)

1 голос
/ 09 августа 2013

Вы можете получить идентификатор клиента следующим образом:

protected void Gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string strClientID = ((TextBox)e.Row.FindControl("txtName")).ClientID;
    }
}

Это даст уникальный идентификатор клиента для каждого текстового поля во всех строках.

1 голос
/ 15 июля 2009

Изменить <%# textDateSent.ClientID %> на <%= textDateSent.ClientID %>.

Argh, вам может понадобиться использовать событие OnDataBinding в виде сетки. Затем поместите буквальный контроль в свой JavaScript. Затем вы можете получить clientID текстового поля и передать его в свой буквальный элемент управления.

protected void GridViewName_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //Create an instance of the datarow
            DataRowView rowData = (DataRowView)e.Row.DataItem;

            //locate your text box
            //locate your literal control
            //insert the clientID of the textbox into the literal control
        }
    }

Найдите здесь отличный подробный учебник по работе в этом контексте.

0 голосов
/ 29 сентября 2017

Это то, что я сделал. На странице aspx я только что передал весь объект в функцию javascript, так что я даже не записал идентификатор клиента. В моем случае объект представлял собой выпадающий список в EditItemTemplate GridView. Я добавил html onchange (this) событие в код aspx.

<asp:DropDownList ID="custReqRegionsDDL" runat="server" onchange='custReqRegionsDDLOnChange(this)'> </asp:DropDownList>

вот мой javascript

function custReqRegionsDDLOnChange(myDDL)
    {
        alert('selected text=' + myDDL.options[myDDL.selectedIndex].text);

}

...