2011-07-29 138 views
0

權利,請不要點我在那裏: Disable a HyperLink from code behind禁用超鏈接在.NET

我的問題如下。 我有我的aspx頁面上的超鏈接:

<asp:HyperLink Visible='<%= _myUser.hasPermission("Intranet Management")%>' Text="Intranet Management" runat="server" NavigateUrl="/Apps/Admin/Default.aspx" /> 

_myUser.hasPermission("Intranet Management")回報與TRUE或FALSE值Boolean取決於如果當前用戶有權限或沒有。 _myUser在aspx.cs文件中聲明爲受保護的成員,所以我可以從aspx文件訪問它。

在我的網頁我收到以下錯誤:

Parser Error Message: Cannot create an object of type 'System.Boolean' from its string representation '<%= _myUser.hasPermission("Intranet Management") %>' for the 'Visible' property.

有沒有這樣做,在aspx文件的任何其他方式?請不要在後面的代碼中要求我這樣做,我有我的理由在這裏做...

感謝您的任何幫助。

+2

後更好地你能告訴的原因是什麼?如果您想以某種方式做錯事,請至少提供爲什麼 –

+0

在某些時候,我將使用sql數據源來填充使用中繼器的鏈接列表,而不是「Intranet管理」等。我將傳遞一個應用程序名稱從DB ... –

+0

這仍然不是一個理由。這意味着要從後面的代碼完成 –

回答

4

你面臨的問題是,asp:Hyperlink是一個服務器控件,而這些習慣裏<%= %>其性能評估代碼。他們會通過IIRC綁定數據,因此您可以嘗試

<asp:HyperLink Visible='<%# _myUser.hasPermission("Intranet Management")%>'... 

並且一定要致電Page.DataBind()

+0

謝謝,這工作,我最終使用了不同的方法,但我仍然將答覆標記爲答案。謝謝! –

3

爲了做到這一點,你不能有runat="server"。這個想法是,服務器端控件將使用後面的代碼進行修改。

如果您不想使用代碼,請使用常規<a>標籤,而不要使用runat="server"。無論如何,這裏似乎沒有任何理由說明你爲什麼需要服務器控制。

+0

感謝您的解釋,+1。 –

1

改用以下內容:

<%# _myUser.hasPermission("Intranet Management") %> 

得到它從here

+0

感謝您的輸入。 –

1

這應該工作...

<asp:HyperLink ID="HyperLink1" Visible='<%# Convert.ToBoolean(_myUser.hasPermission("Intranet Management")) %>' Text="Intranet Management" runat="server" NavigateUrl="/Apps/Admin/Default.aspx" /> 

也許這是所有

<a style='<%= Convert.ToBoolean(_myUser.hasPermission("Intranet Management")) ? "" : "display:none;" %>' href="Apps/Admin/Default.aspx"> Intranet Management </a>