Come faccio a trovare l'ID del client di controllo all'interno di un ASP.NET GridView?
-
13-09-2019 - |
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?
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);
}