How to call Eval in codebehind?

Bryan picture Bryan · Nov 16, 2009 · Viewed 26.9k times · Source

How the heck do I call Eval() from codebehind? I know this is a front-end shortcut for something like DataBinder.Eval(Container.DataItem, "name"), but I cannot get this damn thing to compile. I am missing the proper method parameters, I think. I want to turn something like this:

<asp:Image ID="imgLogo" runat="server" ImageUrl='<%# Eval("name") %>'/>

into:

<asp:Image ID="imgLogo" runat="server" ImageUrl='<%# GetImagePath(???) %>'/>

w/ code-behind:

protected string GetImagePath(????)
{
    //some code
    return "some/logical/path" + Eval("name");
}

The asp:Image control is in a repeater that is bound to a SqlDataReader.

Answer

Ruben picture Ruben · Nov 16, 2009

Eval is a method on Page (on TemplateControl actually, which means that it's also present on UserControl). So you don't need to pass any special parameters:

protected string GetImagePath()
{
    //some code
    return "some/logical/path" + Eval("name");
}

Caution: you can only call Eval while databinding, but that's implicitly the case for <%# Eval(...) %> too, so that shouldn't pose a problem.

If you want the actual object you're binding to, use GetDataItem(), as Eval(x) basically means DataBinder.Eval(GetDataItem(), x).