Domanda

Ho un asp: GridView che contiene un asp: TextBox all'interno di un TemplateField. Vorrei ottenere è ID per l'uso in javascript. Qualcosa di simile a questo:

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

Ma quando compilo, ottengo un errore:

  

Il nome 'textDateSent' non esiste nel contesto attuale

Qualcuno sa come ottenere l'ID client di questo campo testo?

È stato utile?

Soluzione

Prova questo:

<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>

Altri suggerimenti

Forse non si vuole farlo in cui è necessario il ClientID. Scopri questo post qui cui il controllo di fila si fa riferimento in modo generico.

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

Argh, potrebbe essere necessario utilizzare l'evento OnDataBinding della vista griglia. Poi mettere un controllo letterale nel vostro javascript. Poi si può ottenere l'IDcliente della casella di testo e dei mangimi che nel vostro controllo letterale.

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
        }
    }

Guardate qui per un grande tutorial dettagliato a lavorare in questo contesto.

È possibile ottenere ID client in questo modo:

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

Questo darà ID cliente univoco per ciascuna casella di testo in tutte le righe.

Io faccio solo questo ...

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

la cella deve essere sempre la stessa e viene reso in un ingresso. Potrebbe essere necessario modificare il numero alla fine se si dispone di più di un ingresso in quella cella. Questo vi darà il nuovo clientid / id dell'oggetto ingresso (casella di controllo o qualsiasi altra cosa)

Questo è quello che ho fatto. Nella pagina aspx ho appena passato l'intero oggetto alla funzione javascript, quindi non ho nemmeno MEED al cliente id. Nel mio caso l'oggetto era un elenco a discesa nella EditItemTemplate del GridView. Ho aggiunto un onchange html (questo) evento nel codice aspx.

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

Ecco il mio javascript

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

}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top