在Framework 3.5中设置具有服务器标记<%=%>的可见属性

tom*_*fen 54 .net asp.net visible servertag

我一直在使用服务器标签(如<%= whatever%>)在.NET Framework 4项目中工作,以设置runat ="server"控件的可见性,如下所示:

  <div id="MyId" runat="server" visible="<%=MyVisiblePropertyOnCodeBehind %>" >
    Content
  </div>
Run Code Online (Sandbox Code Playgroud)

这适用于框架4,但现在尝试在Framework 3.5项目上使用它似乎不起作用.这是Framework 4的唯一功能吗?是否有最酷的(和.aspx方面)替代方案来设置代码隐藏的可见性?我正在使用丑陋的:

    MiId.Visible = MyVisiblePropertyOnCodeBehind
Run Code Online (Sandbox Code Playgroud)

提前致谢,

汤姆

[已编辑]解决方案:

感谢您的评论让我了解我的问题和解决方案!

不止一件事是我的错.

在VS2010项目中,我们使用<%#而不是<%=

另外,我没有注意到在VS2010项目中我们使用的页面不是来自"Page",而是来自CustomPage类,它自动进行绑定,没有我注意到它,这让我认为这是一个框架4.0仅限功能.

正如您在此处所述,如果您有以下标记:

  <div id="MyId" runat="server" visible="<%# MyVisiblePropertyOnCodeBehind %>" >
    Content
  </div>
Run Code Online (Sandbox Code Playgroud)

你可以使它工作,将以下内容添加到代码隐藏:

    public bool  MyVisiblePropertyOnCodeBehind = true;
    protected void Page_Load(object sender, EventArgs e) {
        DataBind();
        // Or if you want only for one control, MyId.DataBind();             
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,这个DataBind()可以降低应用程序的性能.你知道多少钱吗?这可以被理解为在大项目中使用的"专业"技术,还是你认为应该避免?

我喜欢它在单个视图中使标记可读且易于理解的方式,但我不想因为这样而对慢代码感到内疚.

rsb*_*rro 75

您发布的代码不是ASP.NET 2.0或ASP.NET 4.0运行时中服务器标记的有效语法.在任一版本中,尝试<%= ... %>在服务器标记中设置visible属性都会导致解析器错误:

分析器错误消息:无法从其"可见"属性的字符串表示形式"<%= MyVisiblePropertyOnCodeBehind%>"创建"System.Boolean"类型的对象.

除了Visible<script runat="server">代码隐藏或标记中设置属性之外,您还有两个选项.第一种是在Visible属性上使用数据绑定.您需要DataBind()在其中一个MyId或其中一个父控件上调用该方法以获取要绑定的值.

<div id="MyId" runat="server" visible="<%# MyVisiblePropertyOnCodeBehind %>" >
    Content
</div>
Run Code Online (Sandbox Code Playgroud)

另一种选择是编写如下代码:

<% if(MyVisiblePropertyOnCodeBehind) { %>
<div id="MyId" runat="server">
    Content
</div>
<% } %>
Run Code Online (Sandbox Code Playgroud)

此方法的缺点是您将无法以编程方式将控件添加到包含代码块的页面或控件.如果您尝试,您应该收到错误:

无法修改Controls集合,因为控件包含代码块(即<%...%>)

所有这一切,我认为只是按照你现在的方式设置属性是要走的路.