3

以下のコードでは、ユーザーが特定の役割を果たしている実行時にに変更<%# Eval("name") %>したいと思います。<%# Eval("role") %>コードビハインド(C#)でこれを行うにはどうすればよいですか?

特に、これを行うために使用したいと思いUser.IsInRole("Admin")ます。

<ItemTemplate>
    <div class="comment">
        <asp:Label class="name" runat="server" ID="NAME"> <%# Eval("name") %> </asp:Label>
        <asp:Label class="date" runat="server" Text='<%# "Posted on: " + Eval("date") %>'></asp:Label>
        <asp:Label class="message" runat="server" Text='<%# Eval("Message") %>'></asp:Label>
    </div>
</ItemTemplate>

更新:私はListViewを使用しています。

4

3 に答える 3

3

aspx内のPost型の列挙可能なオブジェクト(linq / collection / whatever ...から)からデータをフェッチすると仮定します。

...
<asp:Label class="name" runat="server" ID="NAME">
      <%# ProcessName(Container.DataItem as Post) %>
</asp:Label>
...

背後のコードで:

protected string ProcessName(Post post){
    if(User.IsInRole("Admin")){
        return post.Name;
    }
    return post.Role;
}

バインディングの前にIsInRoleを評価できるので、すべての行で実行する必要はありません。

于 2013-02-27T13:33:53.740 に答える
2

これに三項演算子を使用できますか?(これは私自身は確かではありません)

<%# condition ? Eval("name") : Eval("role") %>

またはVB.NETの場合

<%# If(condition, Eval("name"), Eval("role")) %>
于 2013-02-27T13:30:12.010 に答える
0

Joachimのおかげで、次の簡単な解決策が得られました。

<ItemTemplate>
<div class="comment">
    <asp:Label class="name" runat="server" ID="NAME"> <%# User.IsInRole("Admin") ? Eval("role") : Eval("name") %> </asp:Label>
    <asp:Label class="date" runat="server" Text='<%# "Posted on: " + Eval("date") %>'></asp:Label>
    <asp:Label class="message" runat="server" Text='<%# Eval("Message") %>'></asp:Label>
</div>

于 2013-02-27T13:52:46.303 に答える