在转发器中使用带有条件语句的XPath

时间:2012-12-18 21:20:24

标签: asp.net vb.net

我正在尝试向我的转发器添加条件语句,但是我收到以下错误:

  • 数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。

我尝试使用的代码如下:

<asp:Repeater ID="repLeftmenu" DataSourceID="xmlMenu" runat="server" EnableViewState="false">
  <HeaderTemplate>
    <ul class="leftMenu">
  </HeaderTemplate>
  <ItemTemplate>
    <li>
      <%  If XPath("@url").ToString = HttpContext.Current.Request.Url.AbsolutePath.ToString Then%>
        <a href="<%# XPath("@url") %>">
          <%# XPath("@title")%>
        </a>  
      <% Else %>
        <a href="<%# XPath("@url") %>">
          <%# XPath("@title")%>
        </a>              
      <%  End If%>
   </li>
 </ItemTemplate>
 <FooterTemplate>
   </ul>
 </FooterTemplate>
</asp:Repeater>    

我的语法有问题吗?

谢谢, crjunk

1 个答案:

答案 0 :(得分:1)

您正在常规代码块中使用数据绑定表达式,这是不受支持的。数据绑定表达式应出现在<%# ... %>块内。常规代码块如下所示:<% ... %>。 (唯一的区别是块开头的#。)

如果在数据绑定块中需要条件,则需要使用表达式(简单地说:单行)。实现此目的的唯一方法是使用以下代码:

<%# If(XPath("Url").ToString = HttpContext.Current.Request.Url.AbsolutePath.ToString, "Display this when true", "Display this when false") %>

当有条件地显示整个HTML块时,这很快就会变得难以处理。那么你可以做的是创建两个块并根据条件表达式设置每个块的可见性:

<span runat="server" visible='<%# XPath("Url").ToString = <%# If(XPath("Url").ToString = HttpContext.Current.Request.Url.AbsolutePath.ToString %>'>

  HTML that should be displayed when condition is true

</span>
<span runat="server" visible='<%# XPath("Url").ToString <> <%# If(XPath("Url").ToString = HttpContext.Current.Request.Url.AbsolutePath.ToString %>'>

  HTML that should be displayed when condition is false

</span>