如何在ASP.NET GridView中找到控件的客户端ID?

时间:2009-07-15 00:11:15

标签: asp.net javascript gridview databound

我有一个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吗?

6 个答案:

答案 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);

}