我在gridview的模板中有一个面板控件 我需要在javascript函数中隐藏/取消隐藏面板,因为我需要将面板的id传递给javascript。
问题是所有面板在gridview中都有相同的id,所以我需要为每个面板设置唯一的id 我试着这样做:
<asp:Panel id= "Panel_<%# Eval("ID")%>"
以及其他一些变体,但总是会出错。
该面板包含一些其他控件,我需要它作为服务器端,因为我需要设置代码隐藏(在检查用户是否经过身份验证后)
我该怎么办?
P.S。
它不必是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!!!
}
}
}
答案 0 :(得分:2)
要在javascript中使用服务器端控件的id,您应该使用控件的ClientID
属性。
<script type="text/javascript">
function hidePanel(panelId){
var panel = document.getElementById(panelId);
panel.style.display = 'none';
}
</script>
所以你可以在像hidePanel(<%=panel.ClientID%>);
这样的处理程序中使用它。
答案 1 :(得分:0)
我想,要将面板的id设置为唯一值,您应该使用它(注意使用单引号和双引号):
<asp:Panel id='<%# "Panel_" + Eval("ID") %>'
尽管如此,这可能仍然无济于事,因为客户端ID将由面板的父控件的ID和面板的ID组成,例如: ctl00_MyGridView_Panel_1
。
作为替代方法,您可以将面板的CssClass
属性设置为唯一值(因为ASP.NET不会更改),然后使用基于客户端的代码来选择面板。例如。使用jquery时:
$('Panel_1').click( ... )
答案 2 :(得分:0)
让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>