использование eval в коде на стороне сервера на странице asp.net - PullRequest
1 голос
/ 20 апреля 2010
<asp:Repeater ID="rptrParent" runat="server">
<ItemTemplate>
        <li>
            <a href="<% =ResolveUrl("~/cPanel/UserView.aspx?User=")%><%# Eval("StudentUserName") %>">
                <span>
                    <%  ProfileCommon pc = new ProfileCommon();
                        pc.GetProfile(Eval("StudentUserName").ToString());
                        Response.Write(pc.FirstName + "" + pc.LastName);
                    %>
                </span>
            </a>
        </li>
</ItemTemplate>

В этой части появляется следующая ошибка

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

<%  ProfileCommon pc = new ProfileCommon();
    pc.GetProfile(Eval("StudentUserName").ToString());
    Response.Write(pc.FirstName + "" + pc.LastName);
%>

Ответы [ 2 ]

4 голосов
/ 20 апреля 2010

В этом контексте вам нужен полный вызов, как это:

<%#  Databinder.Eval(Container.DataItem,"StudentUserName") %>
0 голосов
/ 20 апреля 2010

Хорошо, ребята, спасибо за помощь, но я получил решение:

<asp:Repeater ID="rptrParent" runat="server" onitemdatabound="rptrParent_ItemDataBound">
<ItemTemplate>
        <li>
            <a href="<% =ResolveUrl("~/cPanel/UserView.aspx?User=")%><%# Eval("StudentUserName") %>">
                <span>
                    <asp:Literal ID="lblUserName" runat="server"></asp:Literal>
                </span>
            </a>
        </li>
</ItemTemplate>

и в коде файла я написал следующую функцию:

protected void rptrParent_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item)
    {
        Literal UserName = e.Item.FindControl("lblUserName") as Literal;
        String uName = DataBinder.Eval(e.Item.DataItem, "StudentUserName").ToString();
        ProfileCommon pc = Profile.GetProfile(uName);
        UserName.Text = pc.FirstName + " " + pc.LastName + " [ " + uName + " ]";
    }
}
...