0

リピーターに条件ステートメントを追加しようとしていますが、次のエラーが表示されます。

  • 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>    

構文に何か問題がありますか?

ありがとう、クジャンク

4

1 に答える 1

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>
于 2012-12-18T22:04:54.483 に答える