none
关于repeater的绑定,在不同用户访问时显示不同内容 RRS feed

  • 问题

  • 比如论坛在管理员,版主登录时会在每个文章旁边显示 编辑 删除之类的按钮
    我现在有用两种方法
    1:在
    Repeater1.DataBind() 之后
    if(登录)
    {
    for (int i = 0; i < Repeater1.Items.Count; i++)
    {
    LinkButton tmp = (LinkButton)Repeater1.ItemsIdea.FindControl("LinkButton1");
    tmp.Visible = true;
    tmp = (LinkButton)Repeater1.ItemsIdea.FindControl("LinkButton2");
    tmp.Visible = true;
    }
    }
    但是这种只能用在服务器控件上的样子

    2:在
    Repeater的ItemTemplate
    <%# ResponseOuput(((DataRowView)Container.DataItem).Row["Response"].ToString()) %>
    调用一个在aspx.cs文件里的方法
    public string ResponseOuput(string Response)
    输出内容由那个方法return 出来...



    请问关于这个功能还有什么别的更好方法吗?
    2008年12月23日 3:24

答案

  • 比较简单的方法是: 用两个Panel ,登陆前一个,登陆后一个,用代码去控制他们的状态就行了。
    2008年12月23日 3:33
    版主

全部回复

  • 比较简单的方法是: 用两个Panel ,登陆前一个,登陆后一个,用代码去控制他们的状态就行了。
    2008年12月23日 3:33
    版主
  • 感谢回复~
    试了下这个不错
    另外用PlaceHolder可以避免
    Panel输出个多余的div
    2008年12月23日 6:31
  • 在page中实现   property bool   loged()

     

    可以直接在 <asp:TemplateColxxx     visible="<%#loged%>"    >

     

     

    2008年12月23日 6:36
  • -_-b发现了一点问题
    这样用两个
    Panel,里面有数据绑定的话造成两次绑定呢...这样会浪费资源吗--
    2008年12月23日 14:21
  • 所以请实验下我的方法

    2008年12月23日 14:39
  • 可是我这里有一些是HTML控件呢...
    不可以
    visible="<%#loged%>的样子
    2008年12月23日 14:57
  • 想乐个办法   你试验下看看

    把命令按钮列设置为 模板列

    然后在里面加入

    Code Snippet


           

     

     

    应该就可以实现这一列内容  根据不同用户显示不同成员

     

     

    Code Snippet

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
            DataKeyNames="RoleId" DataSourceID="SqlDataSource1" EmptyDataText="没有可显示的数据记录。">
            <Columns>
               
                <asp:BoundField  DataField="ApplicationId" HeaderText="ApplicationId"
                    SortExpression="ApplicationId" /> 
          
             
                <asp:BoundField DataField="RoleId" HeaderText="RoleId" ReadOnly="True"
                    SortExpression="RoleId" />
                <asp:BoundField DataField="RoleName" HeaderText="RoleName"
                    SortExpression="RoleName" />
                <asp:BoundField DataField="LoweredRoleName" HeaderText="LoweredRoleName"
                    SortExpression="LoweredRoleName" />
                <asp:TemplateField HeaderText="Description" SortExpression="Description">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Description") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                       
        <asp:LoginView ID="LoginView1" runat="server">
            <AnonymousTemplate >xxx</AnonymousTemplate>
            <LoggedInTemplate >yyy</LoggedInTemplate>
            </asp:LoginView>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Description") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
           
        </asp:GridView>

        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
            ConnectionString="<%$ ConnectionStrings:TestBaseConnectionString %>"
            DeleteCommand="DELETE FROM [aspnet_Roles] WHERE [RoleId] = @RoleId"
            InsertCommand="INSERT INTO [aspnet_Roles] ([ApplicationId], [RoleId], [RoleName], [LoweredRoleName], [Description]) VALUES (@ApplicationId, @RoleId, @RoleName, @LoweredRoleName, @Description)"
            ProviderName="<%$ ConnectionStrings:LocalSqlServer.ProviderName %>"
            SelectCommand="SELECT [ApplicationId], [RoleId], [RoleName], [LoweredRoleName], [Description] FROM [aspnet_Roles]"
           
            UpdateCommand="UPDATE [aspnet_Roles] SET [ApplicationId] = @ApplicationId, [RoleName] = @RoleName, [LoweredRoleName] = @LoweredRoleName, [Description] = @Description WHERE [RoleId] = @RoleId">
            <DeleteParameters>
                <asp:Parameter Name="RoleId" Type="Object" />
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Name="ApplicationId" Type="Object" />
                <asp:Parameter Name="RoleId" Type="Object" />
                <asp:Parameter Name="RoleName" Type="String" />
                <asp:Parameter Name="LoweredRoleName" Type="String" />
                <asp:Parameter Name="Description" Type="String" />
            </InsertParameters>
       
            <UpdateParameters>
                <asp:Parameter Name="ApplicationId" Type="Object" />
                <asp:Parameter Name="RoleName" Type="String" />
                <asp:Parameter Name="LoweredRoleName" Type="String" />
                <asp:Parameter Name="Description" Type="String" />
                <asp:Parameter Name="RoleId" Type="Object" />
            </UpdateParameters>
        </asp:SqlDataSource>
        </form>
    </body>
    </html>

     

     

     

    这个测试通过了   登陆就显示yyy  没登陆就xxx
    2008年12月23日 15:10
  • LoginView吗?...这个倒是没有用过......躺了,明天在弄--..感谢帮助嗯~

    2008年12月23日 15:34