我在gridview的模板中有一个面板控件。
我需要在javascript函数中隐藏/取消隐藏面板,因为我需要将面板的id传递给javascript。
问题是所有面板在网格视图中都有相同的id,所以我需要为每个面板设置唯一的id。
我试着做:
<asp:Panel id= "Panel_<%# Eval("ID")%>"还有一些其他的变体,但总是会有错误。
该面板包含一些其他控件,我需要它是服务器端,因为我需要在代码隐藏处设置(在检查用户是否经过身份验证后)。
我能做什么?
附注:
它不一定是Panel,我可以在Findcontrol中找到任何其他控件,并且可以保存其他控件。
更新:
I set the the js event in code behind:
protected void gvw_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (UserIsAuthenticated)
{
HyperLink title = e.Row.FindControl("lnkTitle") as HyperLink;
Panel panel = e.Row.FindControl("panel") as Panel;
title.Attributes.Add("onmouseover", "ShowHidePanel(" + panel.ClientID +")");
//All get the same id!!!
}
}
}发布于 2010-03-15 22:36:48
若要在javascript中使用服务器端控件的ids,应使用控件的ClientID属性。
<script type="text/javascript">
function hidePanel(panelId){
var panel = document.getElementById(panelId);
panel.style.display = 'none';
}
</script>所以你可以在像hidePanel(<%=panel.ClientID%>);这样的处理程序中使用它。
发布于 2010-03-15 22:38:04
我想,要将面板的id设置为唯一值,您应该使用以下内容(注意单引号和双引号的使用):
<asp:Panel id='<%# "Panel_" + Eval("ID") %>'尽管如此,这可能仍然没有帮助,因为客户端ID将由面板的父控件的ID和面板的ID(例如ctl00_MyGridView_Panel_1 )组成。
作为另一种选择,您可以将面板的CssClass属性设置为唯一值(因为这不会被ASP.NET更改),然后使用基于客户端的代码来选择面板。例如,当使用jquery时:
$('Panel_1').click( ... )发布于 2010-03-15 22:38:27
让ASP.NET为您生成ID。然后,使用ClientID属性。
只要它在同一个模板列中,您就应该能够直接在那里使用它。就像这样:
<asp:Panel ID="MyGridViewPanel" runat="server" style="display:none;">Hello World!</asp:Panel>
<a href='javascript:open_the_panel(<%=MyGridViewPanel.ClientID%>);'>Open the panel</a>https://stackoverflow.com/questions/2450935
复制相似问题