19

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を取得する方法を知っている人はいますか?

4

6 に答える 6

32

これを試して:

<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>
于 2009-07-15T02:13:01.293 に答える
2

たぶん、ClientIDが必要な場所ではやりたくないでしょう。行のコントロールが一般的な方法で参照されているこの投稿をここで確認してください。

于 2009-07-15T03:27:49.620 に答える
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
        }
    }

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

于 2009-07-15T00:12:53.393 に答える
1

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

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

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

于 2013-08-09T11:38:27.043 に答える
1

私はこれをするだけです...

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

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

于 2015-07-28T15:19:16.797 に答える
0

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

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

これが私のJavaScriptです

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

}

于 2017-09-29T13:31:41.893 に答える