为什么我不能在没有runat = server的情况下绑定控件的可见性?

时间:2010-06-02 19:06:01

标签: c# asp.net

换句话说,为什么我不能这样做:

<a id="projectsButton" 
visible=<%= someFunctionWhichEvalsToFalse() ? false : true %>>
</a>

似乎什么都不做。我通过切换false和true来检查这个。

我该怎么办?

5 个答案:

答案 0 :(得分:8)

您可以这样做,但它不会执行任何操作,因为HTML没有visible属性。

相反,您可以设置display CSS属性,如下所示:

<a id="projectsButton" 
   style="display: <%= someFunctionWhichEvalsToFalse() ? "none" : "inline" %>">

或者,您可以将整个标记放入if块,如下所示:

<% if (!someFunctionWhichEvalsToFalse()) { %>
    <a id="projectsButton"></a>
<% } %>

答案 1 :(得分:3)

Visible仅适用于服务器控件,因此您需要runat =“server”

如果你想在没有服务器控件的情况下这样做,你可以试试类似的东西:

<a id="projectsButton" style='display:<%= someFunctionWhichEvalsToFalse() ? "none" : "inline" %>'></a>

答案 2 :(得分:2)

换句话说,你的问题是为什么你不能在HTML元素上使用服务器控件属性而不是服务器控件。答案是因为它不是服务器控件,而服务器控件属性仅适用于服务器控件。 HTML标记被视为纯文本。

答案 3 :(得分:1)

您可以在CSS中执行display:none来隐藏元素,尽管该元素将被发送到客户端。要真正隐藏它,您可以将其包装在<asp:PlaceHolder>控件中并绑定PlaceHolder上的Visible属性。

<asp:PlaceHolder ID="placeholder" runat="server" Visible="<%# someFunctionWhichEvalsToFalse() %>">
    <a id="projectsButton" href="#">link</a>
</asp:PlaceHolder>

这将阻止链接html被发送到客户端。

答案 4 :(得分:0)

这将使用a属性向屏幕呈现visible元素,根据W3C,该属性不是a元素的有效属性。您可能希望设置将在设计器文件中创建的Visible的大写HtmlGenericControl属性,因为将runat="server"添加到元素的声明中。