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 回答