Frage

Ich habe ein asp: Gridview, die eine asp enthält: TextBox innerhalb eines Template. Ich mag es für ID in Javascript Verwendung erhalten. So etwas wie folgt aus:

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

Aber wenn ich kompilieren, erhalte ich eine Fehlermeldung:

  

Der Name 'textDateSent' existiert nicht im aktuellen Kontext

Jeder weiß, wie die Client-ID dieses TextBox zu bekommen?

War es hilfreich?

Lösung

Versuchen Sie folgendes:

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

Andere Tipps

Vielleicht möchten Sie nicht, es zu tun, wo Sie die ClientID benötigen. Schauen Sie sich diesen Beitrag hier wo die Kontrollen in einer Reihe sind in allgemeiner Weise verwiesen wird.

Ändern <%# textDateSent.ClientID %> <%= textDateSent.ClientID %>.

Argh, müssen Sie möglicherweise das OnDataBinding Ereignis der Rasteransicht verwenden. Dann legen Sie eine wörtliche Kontrolle in Ihrem Javascript. Dann können Sie die clientID des Textfeldes erhalten und Futtermittel, die in der wörtliche Kontrolle.

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

Sehen Sie hier für ein großes ausführliches Tutorial rel="nofollow auf die Arbeit in diesem Kontext.

Sie können Client-ID wie diese:

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

Dies wird für jedes Textfeld in allen Zeilen eindeutige Client-ID geben.

ich nur tun dies ...

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

die Zelle sollte immer das gleiche und es wird in einen Eingang gemacht. Sie müssen möglicherweise am Ende die Nummer ändern, wenn Sie in dieser Zelle mehr als einen Eingang haben. Dies wird Ihnen die neue clientid / id des Eingabeobjekts (Checkbox oder was auch immer)

Das ist, was ich tat. In der aspx Seite übergab ich nur das gesamte Objekt an die JavaScript-Funktion, so dass ich nicht einmal zu Client-ID meed. In meinem Fall war das Objekt eine Dropdown-Liste in der EditItemTemplate des Gridview. Ich habe einen HTML-Onchange (this) Ereignis in dem aspx-Code.

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

hier ist mein Javascript

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

}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top