web-dev-qa-db-ja.com

ASP.NET GridView内のコントロールのクライアントIDを見つけるにはどうすればよいですか?

TemplateField内にasp:TextBoxを含むasp:GridViewがあります。 JavaScriptで使用するためのIDを取得したいのですが。このようなもの:

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

しかし、コンパイルするとエラーが発生します。

「textDateSent」という名前は現在のコンテキストに存在しません

誰かがこのTextBoxのクライアントIDを取得する方法を知っていますか?

17
Keltex

これを試して:

<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>
30
Chris Mullins

たぶん、ClientIDが必要なところでそれをしたくないでしょう。この投稿をチェックしてください here 行内のコントロールは一般的な方法で参照されます。

2
JBrooks

次のようにクライアントIDを取得できます。

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

これにより、すべての行の各テキストボックスに一意のクライアントIDが付与されます。

1

変化する <%# textDateSent.ClientID %>から<%= textDateSent.ClientID %>

ああ、グリッドビューのOnDataBindingイベントを使用する必要があるかもしれません。次に、JavaScriptにリテラルコントロールを配置します。次に、テキストボックスのclientIDを取得し、それをリテラルコントロールにフィードします。

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

このコンテキスト内での作業に関する 非常に詳細なチュートリアル については、こちらをご覧ください。

1
Andrew Siemer

私はこれをします...

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

セルは常に同じであり、入力にレンダリングされます。そのセルに複数の入力がある場合は、最後に数値を変更する必要がある場合があります。これにより、入力オブジェクト(チェックボックスなど)の新しいclientid/idが得られます

これは私がやったことです。 aspxページでは、オブジェクト全体をjavascript関数に渡しただけなので、クライアントIDも考慮していません。私の場合、オブジェクトはGridViewのEditItemTemplateのドロップダウンリストでした。 aspxコードにhtml onchange(this)イベントを追加しました。

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

ここに私のjavascriptがあります

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

}

0
Roto