19

我有一个 asp:GridView,它在 TemplateField 中包含一个 asp:TextBox。我想获取它的 ID 以在 javascript 中使用。像这样的东西:

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

单元格应始终相同,并呈现为输入。如果您在该单元格中有多个输入,您可能必须更改最后的数字。这将为您提供输入对象的新客户端 ID/ID(复选框或其他)

于 2015-07-28T15:19:16.797 回答
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);

}

于 2017-09-29T13:31:41.893 回答