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を取得する方法を知っていますか?
これを試して:
<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>
たぶん、ClientIDが必要なところでそれをしたくないでしょう。この投稿をチェックしてください here 行内のコントロールは一般的な方法で参照されます。
次のようにクライアントIDを取得できます。
protected void Gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string strClientID = ((TextBox)e.Row.FindControl("txtName")).ClientID;
}
}
これにより、すべての行の各テキストボックスに一意のクライアントIDが付与されます。
変化する <%# 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
}
}
このコンテキスト内での作業に関する 非常に詳細なチュートリアル については、こちらをご覧ください。
私はこれをします...
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);
}