¿Cómo puedo encontrar el ID de control del cliente dentro de un ASP.NET GridView?
javascript databound (6)
Cambie <%# textDateSent.ClientID %>
a <%= textDateSent.ClientID %>
.
Argh, puede necesitar usar el evento OnDataBinding de la vista de cuadrícula. Luego, ponga un control literal en su javascript. Luego puede obtener el ID de cliente del cuadro de texto y alimentarlo con su control literal.
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
}
}
Busque aquí un gran tutorial detallado sobre cómo trabajar en este contexto.
Tengo un asp: GridView que contiene un asp: TextBox dentro de un TemplateField. Me gustaría obtener su identificación para usar en javascript. Algo como esto:
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="textDateSent" runat="server" />
<input type="button" value=''Today''
onclick="setToday(''<%# textDateSent.ClientID %>'');" />
</ItemTemplate>
</asp:TemplateField>
Pero cuando compilo, me sale un error:
El nombre ''textDateSent'' no existe en el contexto actual
¿Alguien sabe cómo obtener la identificación del cliente de este TextBox?
Esto es lo que hice. En la página aspx acabo de pasar todo el objeto a la función javascript, por lo que ni siquiera visité la identificación del cliente. En mi caso, el objeto era una lista desplegable en EditItemTemplate de GridView. Agregué un evento html onchange (this) en el código aspx.
<asp:DropDownList ID="custReqRegionsDDL" runat="server" onchange=''custReqRegionsDDLOnChange(this)''> </asp:DropDownList>
aquí está mi javascript
function custReqRegionsDDLOnChange(myDDL)
{
alert(''selected text='' + myDDL.options[myDDL.selectedIndex].text);
}
Prueba esto:
<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>
Puede obtener la identificación del cliente de esta manera:
protected void Gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string strClientID = ((TextBox)e.Row.FindControl("txtName")).ClientID;
}
}
Esto le dará una identificación de cliente única para cada cuadro de texto en todas las filas.
Solo hago esto ...
var tbl = document.getElementById(''<%=GridView.ClientID%>'');
var checkBox = tbl.rows[i].cells[11].getElementsByTagName("input")[0].id;
la celda siempre debe ser la misma y se convierte en una entrada. Puede tener que cambiar el número al final si tiene más de una entrada en esa celda. Esto le dará el nuevo ID de cliente / ID del objeto de entrada (casilla de verificación o lo que sea)
Tal vez no quieras hacerlo donde necesites el ClientID. Consulte esta publicación aquí donde se hace referencia a los controles de una manera genérica.