Как найти идентификатор клиента элемента управления в 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?
Ответы
Ответ 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);
}