-1

ASP Repeater DataBound を に取得しましDataTableた。コード レンダー ブロック<% %>を使用して、プロジェクト内の別の関数を介して検証を実行しようとしています。基本的に、ユーザーが管理者でない場合、最初の列を表示したくありません。

関数は正しく戻りますが、それでも常に if ブロックにジャンプします。別のページの別のリピーターで同じコードを試しましたが、うまくいきました。これがなぜ奇妙な振る舞いをしているのか、何か考えはありますか?

<asp:Repeater runat="server" ID="batchesRPT">

    <HeaderTemplate>
        <table>
            <tr> <% if( myProject.myUserRole.IsUserInRole( "ADMIN" ) )
        { %>
                <th>Select Batch</th> <% } %>
                <th>Batch ID</th>
                <th>Batch Date</th>
            </tr>
    </HeaderTemplate>

    <ItemTemplate>
        <tr>
            <% if( GenKFI.myUserRole.IsUserInRole( "ADMIN" ) )
                { %> <td><%#Eval( "CheckboxVAL" ) %></td> <% } %>
                <td><%#Eval( "BatchID" ) %></td>
                <td><%#Eval( "BatchDate" ) %></td>
        </tr>

    </ItemTemplate>

    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

更新: 以前のコード ビハインドでは、管理者以外のケースでは CheckboxVAL が単純に省略されていました (そのため、if によって評価されないようにするため、問題になることはありませんでした)。

このリンクを見つけて、データバインディングタグの評価が早すぎるだけかもしれないと思いました。いくつかの手順を実行したところ、最初に評価を試み<%#Eval( "CheckboxVAL" ) %>、エラーが発生し (非管理者には CheckboxVAL が存在しなかったため)、戻って if ステートメントを評価することがわかりました。管理者以外の DataTable にも CheckboxVAL 列が含まれるように変更し、空のままにしました。これで、空の列が評価され、戻って if ステートメントがチェックされ、最初の列はレンダリングされません。だから今それは動作します。

これは奇妙な動作のようです。if ステートメント内で評価し、後で戻って条件をチェックする理由について説明がある人はいますか?

4

1 に答える 1