【问题标题】:How to set ASP.NET control property through IIf statement如何通过 IIf 语句设置 ASP.NET 控件属性
【发布时间】:2014-05-15 22:26:20
【问题描述】:

我不确定在 .NET 2.0 之后情况是否发生了变化,因为在 .NET 2.0 中我曾经能够设置如下内容:

<asp:Panel runat="server" Visible='<%#IIf(Some condition here, "true", "false") %>' />

我一直这样做是为了有一个干净的代码。

目前我正在使用 .NET 3.0,但我这辈子都无法正常工作。我正在评估的条件不是访问任何数据绑定字段,而是像在后面的代码中检查对象的属性一样简单。 谁能建议这个内联代码的外观?

更新:

这是我正在尝试做的一个例子。我发誓这样的东西曾经在 .NET 2.0 中工作,但现在不能工作:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0               Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script runat="server">
        protected bool IsValid() { return true; }       
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label Text="123" runat="server" Visible=<%#iif(IsValid(), "true", "false")%>/>
    </div>
    </form>
</body>
</html>

【问题讨论】:

  • 显示您的IIF。如果您的目标是 3.5,则可以使用 IF-operator,它使用短路评估。
  • 也许可以显示更多代码以使您的问题更清楚。
  • 什么告诉你它不起作用?
  • @Bala:你知道 C# 中的 IIF 吗?
  • @TimSchmelter OP 没有提到 vb/c#。也许他以前使用 vb.net,现在他使用 c#,因此它不起作用?

标签: asp.net code-behind


【解决方案1】:

&lt;%# 表示您对控件/页面进行了数据绑定。所以要么你做

Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Me.DataBind()
End Sub

或者你完全在代码隐藏中完成(我更喜欢):

Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    MyPanel.Visble = YourCondition
End Sub

http://naspinski.net/post/inline-aspnet-tags-sorting-them-all-out-%283c25242c-3c253d2c-3c252c-3c252c-etc%29.aspx

【讨论】:

  • 您好,就我个人而言,我喜欢在 .ASPX 中添加诸如隐藏/显示控件之类的内容,以使后面的代码更加清晰。我发布了一个简单的示例,说明我正在尝试做的事情作为对原始帖子的更新。
  • @user1171461:情况正好相反。 aspx 是只负责布局的可视化前端。代码隐藏用于业务逻辑。
【解决方案2】:

您可以在标记中使用 VB,在代码隐藏中使用 C#

<%@ Page Language="VB"

当然……Vis​​ual Studio 疯了

<%@ Page Language="VB" AutoEventWireup="true" CodeBehind="WebForm6.aspx.cs" Inherits="WebApplication1.WebForm6" %>

<asp:repeater id="rpt" runat="server">
        <ItemTemplate>
            <br />
            <%# Container.DataItem %>
            <br />
            <%#IIf( CType(Container.DataItem, System.Int32) > 5 = 0, "true", "false") %>
            <br />
            <br />
        </ItemTemplate>
    </asp:repeater>

和后面的代码中的 C#

using System.Linq;
namespace WebApplication1
{
    public partial class WebForm6 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {           
            rpt.DataSource = Enumerable.Range(1, 29);
            rpt.DataBind();
        }
    }
}

VS 对它的感受

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多