为什么ClientID没有出现?怎么修

时间:2012-06-05 19:52:41

标签: jquery asp.net

我在ASP中有一个jQuery函数,我试图获取客户端ID。当它呈现HTML时,我得到了这个结果。

[HTML RENDERED]

$("")//ctl00_Content_gvProgramList
                    .tablesorter({ widthFixed: true, widgets: ['zebra'],
                        widgetOptions: {
                            zebra: ["even", "odd"]
                        }
                    })
                    .tablesorterFilter({ filterContainer: $("#filter-box"),
                        filterClearContainer: $("#filter-clear-button"),
                        filterColumns: [0, 1, 2, 3],
                        filterCaseSensitive: false
                    })
                    .tablesorterPager({ container: $("#pager") });

[CODE BEHIND]

        $("<%# gvProgramList.ClientID %>")//ctl00_Content_gvProgramList
                .tablesorter({ widthFixed: true, widgets: ['zebra'],
                    widgetOptions: {
                        zebra: ["even", "odd"]
                    }
                })
                .tablesorterFilter({ filterContainer: $("#filter-box"),
                    filterClearContainer: $("#filter-clear-button"),
                    filterColumns: [0, 1, 2, 3],
                    filterCaseSensitive: false
                })
                .tablesorterPager({ container: $("#pager") });

如果我使用ct100_Content_gvProgramList所有javascript的工作方式都应该如此,那么请不要发布与此相关的任何答案。我想要一个关于如何正确显示ClientID的答案。


更新

我想使用$('#<%= gvProgramList.ClientID %>'),但是我收到错误。

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). 

Line 16:         Head.Controls.Add(Header())
Line 17:         Head.Controls.Add(Menu())
Line 18:         Foot.Controls.Add(Footer())

3 个答案:

答案 0 :(得分:3)

使用:

<%= ... %>

而不是:

<%# ... %>

所以:

$('#<%= gvProgramList.ClientID %>') ...

更新后

由于您正在构建/修改代码隐藏中的控件集合,因此当您尝试Response.Write()<%= ... %>)时,aspnet会被禁止。尝试使用类名而不是控件的id

或者:

<script> ... </script>包裹在<asp:placeholder>内。这将使脚本成为占位符的子节点,而不是导致错误的服务器端控件。

答案 1 :(得分:0)

另一种选择是使用您在代码隐藏中填充的占位符控件替换绑定。因此,在.aspx / .ascx文件中,您将替换它:

$('#<%= gvProgramList.ClientID %>')

有了这个:

<asp:PlaceHolder id="phProgramListClientId" runat="server"></asp:PlaceHolder>

然后在你的代码隐藏中,你可以这样做:

phProgramListClientId.Controls.Add( new LiteralControl( 
    String.Format( "$('#{0}')", gvProgramList.ClientID ) ) );

答案 2 :(得分:0)

<%# ... %>

用于数据绑定,因此您可以执行此操作

Page.DataBind();