C# 如何显示使用repeater的会话中的成员?

C# 如何显示使用repeater的会话中的成员?,c#,session,repeater,datalist,C#,Session,Repeater,Datalist,我在母版页上登录成员,并将此代码保存在我的memberListing.aspx上 <asp:Repeater ID="rptmembers" runar="server"> <ItemTemplate> <div class="MemberName"><%# Eval("strName") %></div> <div class="MemberSurname"><%# Eval(

我在母版页上登录成员,并将此代码保存在我的memberListing.aspx上

<asp:Repeater ID="rptmembers" runar="server">
    <ItemTemplate>
        <div class="MemberName"><%# Eval("strName") %></div>
        <div class="MemberSurname"><%# Eval("strSurname")%</div>
    <ItemTemplate>
</asp:Repeater>
这对于显示DB中的成员列表很好,但是如何显示会话中的所有成员,通过将其包装在if语句中

if(clsMembers = (clsmembers)Session["clsmembers"] == dtMembers) //// some sort of check 
{
    // when show members in session with repeater
    // when the session dies the member will not be shown in list till he logs back in
}

当会话中存储了成员列表时,将其绑定到中继器的最简单方法是:

  • 创建类型为
    BindingList
    的变量,其中成员是具有strName和strSurname字段的类
  • 用存储在会话中的集合中的项目填充它(dtMemebers?)
  • BindingList
    绑定到中继器,例如
    rptMembers.DataSource=memeberBindingList
更简单的解决方案是在会话中存储BindingList,这样就足以:

if(null != Session["clsMembers"])
{ 
   rptmembers.DataSource = (BindingList<Member>)Session["clsMembers"];
   rptmembers.DataBind();
}
if(null!=会话[“clsMembers”])
{ 
rptmembers.DataSource=(BindingList)会话[“clsMembers”];
rptmembers.DataBind();
}

会话不能从数据绑定表达式()中使用,因此这肯定是正确的答案。您应该在代码隐藏中绑定,而不是在表达式语法中绑定。您必须使用Eval()。调用服务器端函数可以,但该函数无权访问会话。它必须位于数据源中,才能是eval()'d。我猜callstack会将数据绑定排除在会话的包含之外(事先调用start/stop)是的。它甚至说。您必须在适当的执行上下文(即页面加载)期间手动调用DataBind,而不是在aspx元素中使用DataSourceID属性。
if(null != Session["clsMembers"])
{ 
   rptmembers.DataSource = (BindingList<Member>)Session["clsMembers"];
   rptmembers.DataBind();
}