我有一个asp:GridView,它在TemplateField中包含一个asp:TextBox。我想获取它在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吗?
答案 0 :(得分:30)
试试这个:
<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>
答案 1 :(得分:2)
也许您不想在需要ClientID的地方这样做。查看此帖子here,其中一行中的控件以通用方式引用。
答案 2 :(得分:1)
将<%# textDateSent.ClientID %>
更改为<%= textDateSent.ClientID %>
。
Argh,您可能需要使用网格视图的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
}
}
在此处查看great detailed tutorial在此上下文中的工作情况。
答案 3 :(得分: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。
答案 4 :(得分:1)
我就这么做......
var tbl = document.getElementById('<%=GridView.ClientID%>');
var checkBox = tbl.rows[i].cells[11].getElementsByTagName("input")[0].id;
单元格应始终相同,并将其渲染为输入。如果在该单元格中有多个输入,则可能必须更改末尾的数字。这将为您提供输入对象的新clientid / id(复选框或其他)
答案 5 :(得分:0)
这就是我所做的。在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);
}