代码之家  ›  专栏  ›  技术社区  ›  Bryan

如何在codebehind中调用eval?

  •  16
  • Bryan  · 技术社区  · 15 年前

    我怎么才能从codebehind调用eval()?我知道这是类似databinder.eval(container.dataitem,“name”)的前端快捷方式,但我无法编译这该死的东西。我想我缺少正确的方法参数。我想变成这样:

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

    进入:

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

    W/代码落后:

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

    asp:image控件位于绑定到sqldatareader的中继器中。

    4 回复  |  直到 13 年前
        1
  •  14
  •   Ruben    15 年前

    Eval 是一种方法 Page (上) TemplateControl 实际上,这意味着它也在 UserControl )所以不需要传递任何特殊参数:

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

    注意:您只能拨打 评估 数据绑定时,但这是 <%# Eval(...) %> 也是,所以这不应该构成问题。

    如果需要绑定到的实际对象,请使用 GetDataItem() 作为 Eval(x) 基本上意味着 DataBinder.Eval(GetDataItem(), x) .

        2
  •  4
  •   John Sheehan    15 年前
    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
  •  4
  •   tvanfosson    15 年前

    您是否尝试过类似的操作:

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

    protected string GetImagePath( string image )
    {
        return "some/logical/path/" + image;
    }
    
        4
  •  2
  •   Nigel Sampson    15 年前

    另一个简单的方法是使用格式为的eval重载,aspx将变为:

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