页面循环问题asp.net

我正在使用嵌套的中继器。我渲染了几个组,每个组都有我需要渲染不同属性的成员。 我在嵌套转发器上使用ItemDataBound来找出嵌套转发器当前呈现的成员。我在.aspx中有< %%>标签,用于检查当前用户是否具有某个属性,如果有,我会渲染需要去那里的div和其他HTML元素。 所有数据都是正确的。当我调试时,我会收集正确的数据,并获得有关用户是谁以及用户具有哪些属性的正确信息。我将当前评估的用户保存在受保护的字符串currentRenderedUser中,我用它来查找用户在aspx文件中的用户。 问题是,当aspx上的< %%>被评估时,转发器已经遍历了所有的集合或者某些东西,因为currentRenderedUser在aspx文件的每个evalutaion期间是相同的。 对不起,我不知道aspx文件中“< %%>”代码的正确术语。 这是aspx的相关部分(我认为):
<ItemTemplate>
    <!-- nested repeater data -->

    <tr>
        <td width="50%"><div class="memberName"><%# DataBinder.Eval(Container.DataItem, "userEmail" )%></div></td>


        <div style="display: none;"></div>
        <% if (CheckIfUserIsAdmin(email, currentRenderedGroup))
                    {  %>

                   <%if (CheckIfUserIsAdmin(currentRenderedUser, currentRenderedGroup))
                     { //Checks so that the user being rendered isn't already admin%>
                          <td><div style="margin-right:30px;" class="makeAdminButton"></div></td>
                    <% }
                     else
                     {%>
                        <td><div style="margin-right:30px;" class="makeAdminButton"><asp:ImageButton ID="ImageButtonMakeUserAdmin" CommandName="MakeAdmin" BorderWidth="0" ImageUrl="~/gfx/doAdmin.png" CommandArgument='<%#Convert.ToString(DataBinder.Eval(Container.DataItem, "userEmail" )) + " " +  Convert.ToString(DataBinder.Eval(((RepeaterItem)Container.Parent.Parent).DataItem, "groupId"))%>' runat="server" AlternateText="Make admin" /></div></td>
                        <td><div class="removeUserButton"><asp:ImageButton ID="ImageButtonRemoveUserFromGroup" CommandName="RemoveUserFromGroup" BorderWidth="0" ImageUrl="~/gfx/can.png" CommandArgument='<%# Convert.ToString(DataBinder.Eval(Container.DataItem, "userEmail" )) + " " + Convert.ToString(DataBinder.Eval(((RepeaterItem)Container.Parent.Parent).DataItem, "groupId"))%>' runat="server" AlternateText="Delete" /></div></td>
                                <% } %>
       <%}%>

    </tr>


</ItemTemplate>
这是评估当前用户的后端的一部分:
protected void NesterRepeater_ItemDataBound(object sender,
                       System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.AlternatingItem
        || e.Item.ItemType == ListItemType.Item)
       {
           DataRowView dataRowView = (DataRowView)e.Item.DataItem;

           string memberInGroup = Convert.ToString(dataRowView["userEmail"]);
           currentRenderedUser = memberInGroup;
       }
}
如何以更好(或至少,工作)的方式解决这个问题? 谢谢     
已邀请:
问题是事件ItemDataBound首先被执行,所以你可能总是从Repeater的DataSource获取最后一条记录的值,如果我没有弄错的话。 最好这样做:
<ItemTemplate>
    <tr>
        <td width="50%"><div class="memberName"><%# DataBinder.Eval(Container.DataItem, "userEmail" )%></div></td>
        <div style="display: none;"></div>
        <asp:PlaceHolder ID="phNoAdmin" runat="server" Visible="false">
            <td><div style="margin-right:30px;" class="makeAdminButton"></div></td>
        </asp:PlaceHolder>

        <asp:PlaceHolder ID="phAdmin" runat="server" Visible="false">
            <td><div style="margin-right:30px;" class="makeAdminButton"><asp:ImageButton ID="ImageButtonMakeUserAdmin" CommandName="MakeAdmin" BorderWidth="0" ImageUrl="~/gfx/doAdmin.png" CommandArgument='<%#Convert.ToString(DataBinder.Eval(Container.DataItem, "userEmail" )) + " " +  Convert.ToString(DataBinder.Eval(((RepeaterItem)Container.Parent.Parent).DataItem, "groupId"))%>' runat="server" AlternateText="Make admin" /></div></td>
            <td><div class="removeUserButton"><asp:ImageButton ID="ImageButtonRemoveUserFromGroup" CommandName="RemoveUserFromGroup" BorderWidth="0" ImageUrl="~/gfx/can.png" CommandArgument='<%# Convert.ToString(DataBinder.Eval(Container.DataItem, "userEmail" )) + " " + Convert.ToString(DataBinder.Eval(((RepeaterItem)Container.Parent.Parent).DataItem, "groupId"))%>' runat="server" AlternateText="Delete" /></div></td>
        </asp:PlaceHolder>
    </tr>
</ItemTemplate>
而背后的代码:
protected void NesterRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
        DataRowView dataRowView = (DataRowView)e.Item.DataItem;

        PlaceHolder phNoAdmin = e.Item.FindControl("phNoAdmin") as PlaceHolder;
        PlaceHolder phAdmin = e.Item.FindControl("phAdmin") as PlaceHolder;

        string memberInGroup = Convert.ToString(dataRowView["userEmail"]);
        currentRenderedUser = memberInGroup;

        if (CheckIfUserIsAdmin(email, currentRenderedGroup))
        { 
            if (CheckIfUserIsAdmin(currentRenderedUser, currentRenderedGroup))
            {
                phNoAdmin.Visible = true;
                phAdmin.Visible = false;
            }
            else
            {
                phNoAdmin.Visible = false;
                phAdmin.Visible = true;
            }
        }            
    }
}
如果你为了可维护性原因而绑定我在代码中写的2 PlaceHolder控件内的数据会更好。 HTH     

要回复问题请先登录注册