如何在代码中调用Eval?

时间:2009-11-16 22:43:46

标签: asp.net .net data-binding eval

如何从代码隐藏中调用Eval()?我知道这是像DataBinder.Eval(Container.DataItem,“name”)之类的东西的前端快捷方式,但我无法编译这个该死的东西。我想,我错过了正确的方法参数。我想转过这样的话:

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

成:

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

代码隐藏:

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

asp:Image控件位于一个绑定到SqlDataReader的转发器中。

4 个答案:

答案 0 :(得分:14)

EvalPage上的一种方法(实际上在TemplateControl上,这意味着它也出现在UserControl上)。所以你不需要传递任何特殊参数:

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

警告:您只能在数据绑定时调用Eval,但<%# Eval(...) %>也隐含这种情况,因此不会造成问题。

如果您想要绑定的实际对象,请使用GetDataItem(),因为Eval(x)基本上代表DataBinder.Eval(GetDataItem(), x)

答案 1 :(得分:4)

你有没有试过像:

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

protected string GetImagePath( string image )
{
    return "some/logical/path/" + image;
}

答案 2 :(得分:4)

protected void rProducts_ItemDataBound(object sender, RepeaterItemEventArgs e) {
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) {

        Image ProductImage = (Image)e.Item.FindControl("ProductImage");
        ProductImage.ImageUrl = DataBinder.Eval(e.Item.DataItem, "ProductImageUrl");

        // Or strongly typed
        Product product = (Product)e.Item.DataItem;
        ProductImage.ImageUrl = product.ProductImageUrl;
    }
}

答案 3 :(得分:2)

另一种简单的方法是使用采用格式的Eval重载,aspx变为:

<asp:Image ID="imgLogo" runat="server" ImageUrl='<%# Eval("name", "some/logical/path/{0}") %>'/>