在ASP中操作ItemTemplate内部控件.. NET使用c#

本文关键字:控件 NET 使用 内部 ItemTemplate ASP 操作 | 更新日期: 2023-09-27 18:01:27

在下面的代码中,当用户处于某个角色时,我想在运行时将<%# 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

在ASP中操作ItemTemplate内部控件.. NET使用c#

假设您从类型为Post的可枚举对象中获取数据(从linq/collection/whatever…),在aspx:

...
<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,这样你就不必对每一行执行

可以使用三元操作符吗?(我自己也不确定)

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

或在VB的情况下。净

<%# If(condition, Eval("name"), Eval("role")) %>

感谢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>