如何在标记中设置条件?

时间:2014-12-01 10:12:00

标签: asp.net

我有一个ASP.NET页面,其中包含转发器控制,其中包含另一个转发器控件:

<asp:Repeater ID="GroupList" runat="server">
    <ItemTemplate>
        <div class="groupSepatator">
        </div>
        <asp:Repeater ID="ActionList" runat="server">
            <ItemTemplate>
                <div class="actionData">
                    <asp:PlaceHolder runat="server" Visible='<%# Eval("ActionDate").ToString() == "01.01.1980 0:00:00" %>'>
                        <time class="actionDate" datetime="<%# Formatter.FormatDate(Eval("ActionDate").ToString(), 11) %>">
                            <%# Formatter.FormatDate(Eval("ActionDate").ToString(), 8) + Eval("StrEndDate") %>
                        </time>
                    </asp:PlaceHolder>
                    <asp:PlaceHolder runat="server" Visible='<%# Eval("ActionDate").ToString() != "01.01.1980 0:00:00" %>'>
                        <time class="actionDate" itemprop="startDate" datetime="<%# Formatter.FormatDate(Eval("ActionDate").ToString(), 11) %>">
                            <%# Formatter.FormatDate(Eval("ActionDate").ToString(), 8) + Eval("StrEndDate") %>
                        </time>
                    </asp:PlaceHolder>
                </div>
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

如您所见,有2个占位符构成一个逻辑块。我需要添加新的逻辑块,在内部中继器内的第一个下面有两个类似的占位符。应该存在依赖于查询字符串参数的条件 - ActionTopTypeID。如果存在ActionTopTypeID,则应读取具有2个占位符的第一个块(可见),如果不存在ActionTopTypeID,则应读取具有2个占位符的第二个块(可见)。

代码中也存在一个条件:

if (actionTopTypeID == -1)
{
    items = Method1();
}
else
{
    items = Method2();
}

如何在标记中设置条件?

更新代码:

<div class="actionData" Visible='<%# !string.IsNullOrEmpty(Request.QueryString["ActionTopTypeID"]) %>'>
    <asp:PlaceHolder runat="server" Visible='<%# Eval("ActionDate").ToString() == "01.01.1980 0:00:00" %>'>
        <time class="actionDate" datetime="<%# Formatter.FormatDate(Eval("ActionDate").ToString(), 11) %>">
            <%# Formatter.FormatDate(Eval("ActionDate").ToString(), 8) + Eval("StrEndDate") %>
        </time>
    </asp:PlaceHolder>
    <asp:PlaceHolder runat="server" Visible='<%# Eval("ActionDate").ToString() != "01.01.1980 0:00:00" %>'>
        <time class="actionDate" itemprop="startDate" datetime="<%# Formatter.FormatDate(Eval("ActionDate").ToString(), 11) %>">
            <%# Formatter.FormatDate(Eval("ActionDate").ToString(), 8) + Eval("StrEndDate") %>
        </time>
    </asp:PlaceHolder>
    <a class="actionTitle" href="Details.aspx?ActionID=<%# Eval("ActionID") %>" itemprop="url"><div itemprop="name"><%# Eval("NameForH1") %></div></a>
    <a class="actionExtraData" href="Actions.aspx?ActionTypeID=<%# Eval("ActionTypeID") %>"><%# Eval("ActionType") %></a>
    <a class="actionExtraData" href="Actions.aspx?ActionPlaceID=<%# Eval("ActionPlaceID") %>" title="<%# Eval("Coordinates") %>" itemprop="url">
        <span itemprop="location"><%# Eval("PlaceName") %></span>
    </a>
    <a class="linkBuyTicket" href="Order.aspx?ActionID=<%# Eval("ActionID") %>&ActionDate=<%# HttpUtility.UrlEncode(Formatter.FormatDate(Eval("ActionDate").ToString(), 6)) %>">
        <div class="buttonCommonSmall">Заказать билеты</div>
    </a>
</div>
<div class="actionData" Visible='<%# string.IsNullOrEmpty(Request.QueryString["ActionTopTypeID"]) %>'>
    Hello
</div>

2 个答案:

答案 0 :(得分:0)

您已经将类似的逻辑应用于占位符的可见性。现在你可以将它们应用于包装它们的div:

<div class="actionData" runat="server"
     Visible='<%# !string.IsNullOrEmpty(Request.QueryString["ActionTopTypeID"]) %>'>
</div>
<div class="actionData" runat="server"
     Visible='<%# string.IsNullOrEmpty(Request.QueryString["ActionTopTypeID"]) %>'>
</div>

请注意,可见性条件是独占的,并且确保一次只显示一个div。

为了使它更清洁,你总是可以在代码后面引入一个包含逻辑的非私有方法并返回boolean,然后像这样调用它:

<div class="actionData" runat="server"
     Visible='<%# HasActionTopTypeID() %>'>
</div>
<div class="actionData" runat="server"
     Visible='<%# !HasActionTopTypeID() %>'>
</div>

答案 1 :(得分:0)

将您的代码部分包装在ASP:Panel控件中,并为现有代码添加其他逻辑;

if (actionTopTypeID == -1)
{
    items = Method1();
    pnlItems1.Visible = true;
}
else
{
    items = Method2();
    pnlItems2.Visible = true;
}