2010-03-15 82 views
2

我在gridview的模板中有一个panel控件。
我需要在javascript函数中隐藏/取消隐藏面板,为此我需要将面板的ID传递给javascript。在gridview中为panel控件设置id

问题是所有面板在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!!! 
    } 
    } 
} 

回答

2

在JavaScript中使用,你应该使用控件的属性ClientID服务器端控件的ID。

<script type="text/javascript"> 
function hidePanel(panelId){ 
    var panel = document.getElementById(panelId); 
    panel.style.display = 'none';  
} 
</script> 

因此,您可以在一些处理程序中使用它,如hidePanel(<%=panel.ClientID%>);

+0

如果你在gridview中这样做,那么你最终会得到N'hidePanel()'函数。 – M4N 2010-03-15 22:44:51

+0

@Martin你是对的。更新为具有N个'hidePanel()'调用。 – Li0liQ 2010-03-15 23:10:15

0

我想,到面板的ID设置为唯一值,你应该使用这个(请注意使用的单,双引号):

<asp:Panel id='<%# "Panel_" + Eval("ID") %>' 

虽然,这将可能仍然没有帮助,因为客户端ID将由面板的父控件的ID和面板的ID组成,例如ctl00_MyGridView_Panel_1

作为替代方案,您可以将面板的CssClass属性设置为唯一值(因为ASP.NET不会更改此属性),然后使用基于客户端代码的面板来选择面板。例如。当使用jQuery时:

$('Panel_1').click(...) 
+0

我不使用jquery ... – mariki 2010-03-15 23:19:35

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> 
+0

正如我写的问题,这是在gridview内...所有面板都有相同的ID和clientid – mariki 2010-03-15 23:20:36

+0

他们不会有相同的ClientID。这就是客户端ID的用途。它将使用唯一的ID进行呈现,并且ClientID属性是您访问唯一ID的方式。 – 2010-03-15 23:56:37

+0

如果我在代码隐藏中设置事件(attributes.add),则获取相同的ID。 – mariki 2010-03-16 07:19:51