2010-03-15 77 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

相關問題