1

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

[HTML 渲染]

$("")//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") });

[代码背后]

        $("<%# 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())
4

3 回答 3

3

采用:

<%= ... %>

代替:

<%# ... %>

所以:

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

更新后

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

或者:

<script> ... </script>里面包起来<asp:placeholder>。这将使脚本成为占位符的子代,而不是导致错误的服务器端控件。

于 2012-06-05T19:54:17.273 回答
0

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

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

有了这个:

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

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

phProgramListClientId.Controls.Add( new LiteralControl( 
    String.Format( "$('#{0}')", gvProgramList.ClientID ) ) );
于 2012-06-05T20:23:45.190 回答
0
<%# ... %>

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

Page.DataBind();
于 2012-06-05T20:31:20.763 回答