Подтвердить что ты не робот

Как найти идентификатор клиента элемента управления в ASP.NET GridView?

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

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

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

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

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

4b9b3361

Ответ 1

Попробуйте следующее:

<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

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

Ответ 3

Измените <%# 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
        }
    }

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

Это то, что я сделал. На странице 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);

}