将id设置为gridview中的面板控件

时间:2010-03-15 22:32:24

标签: asp.net javascript

我在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!!!
     }
   }
}

3 个答案:

答案 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>