Pregunta

Tengo un asp: GridView que contiene un asp: TextBox dentro de un TemplateField. Me gustaría obtener su ID para su uso 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 el ID de cliente de este cuadro de texto?

¿Fue útil?

Solución

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>

Otros consejos

Tal vez usted no desea hacerlo, donde se necesita el ClientID. Echa un vistazo a este post aquí donde se hace referencia a los controles en una fila de una manera genérica.

Cambiar <%# textDateSent.ClientID %> a <%= textDateSent.ClientID %>.

Argh, puede que tenga que utilizar el evento OnDataBinding de la vista de cuadrícula. A continuación, poner un control literal en su Javascript. A continuación, se puede obtener el ClientId del cuadro de texto y alimentar a que en su control de 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
        }
    }

Mire aquí para una gran tutorial detallado trabajando dentro de este contexto.

Usted puede obtener ID de 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 dará a los ID de cliente único para cada cuadro de texto en todas las filas.

Sólo hago esto ...

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

la celda debe ser siempre la misma y se rindió a una entrada. Puede que tenga que cambiar el número al final si usted tiene más de una entrada en esa celda. Esto le dará la nueva ClientID / id del objeto de entrada (casilla de verificación o lo que sea)

Esto es lo que hice. En la página aspx que acaba de pasar todo el objeto a la función de JavaScript, por lo que ni siquiera meed al ID de cliente. En mi caso, el objeto era una lista desplegable en el EditItemTemplate del GridView. Añadí un onchange html (esto) evento en el código aspx.

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

Esta es mi javascript

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

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top