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