【问题标题】:Disable hyperlink in .NET在 .NET 中禁用超链接
【发布时间】:2011-07-29 13:50:42
【问题描述】:

好吧,请不要指点我那里: Disable a HyperLink from code behind

我的问题如下。 我的 aspx 页面上有一个超链接:

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

_myUser.hasPermission("Intranet Management") 返回值为 TRUE 或 FALSE 的布尔值取决于当前用户是否具有该权限。 _myUser 在 aspx.cs 文件中被声明为受保护的成员,因此我可以从 aspx 文件中访问它。

在我的页面上出现以下错误:

解析器错误消息:无法创建“System.Boolean”类型的对象 从它的字符串表示 ''。

在 aspx 文件中还有其他方法吗?请不要在后面的代码中要求我这样做,我这里有我的理由……

感谢您的帮助。

【问题讨论】:

  • 您能说说原因吗?如果您想以错误的方式做某事,请至少提供原因
  • 在某些时候,我将使用 sql 数据源来使用中继器填​​充链接列表,而不是“Intranet Management”等,我将传递从 DB 中提取的应用程序名称...
  • 这仍然不是原因。它也应该从后面的代码中完成

标签: c# .net asp.net


【解决方案1】:

您面临的问题是asp:Hyperlink 是一个服务器控件,它们不会评估&lt;%= %&gt; 内的代码的属性。他们将通过 IIRC 进行数据绑定,因此您可以尝试

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

请务必致电Page.DataBind()

【讨论】:

  • 谢谢,这行得通,毕竟我最终使用了不同的方法,但无论如何我都会将您的回复标记为答案。谢谢!
【解决方案2】:

为了做到这一点,你不能拥有runat="server"。这个想法是服务器端控件将使用后面的代码进行修改。

如果您不想在后面使用代码,请使用不带runat="server" 的常规&lt;a&gt; 标签。无论如何,您似乎没有任何理由需要服务器控件。

【讨论】:

    【解决方案3】:

    请改用以下内容:

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

    here得到它

    【讨论】:

      【解决方案4】:

      这应该可以工作...

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

      【讨论】:

        猜你喜欢
        • 2017-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        相关资源
        最近更新 更多