Подтвердить что ты не робот

Как позвонить Eval в кодовое слово?

Как я называю Eval() от codebehind? Я знаю, что это интерфейсный ярлык для чего-то вроде DataBinder.Eval(Container.DataItem, "name" ), но я не могу получить эту чертову вещь для компиляции. Думаю, у меня отсутствуют подходящие параметры метода. Я хочу сделать что-то вроде этого:

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

в

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

w/code-behind:

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

Управление asp: Image находится в репитере, который привязан к SqlDataReader.

4b9b3361

Ответ 1

Eval - это метод на Page (фактически на TemplateControl, что означает, что он также присутствует на UserControl). Поэтому вам не нужно передавать какие-либо специальные параметры:

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

Предостережение: вы можете вызывать только Eval во время привязки данных, но это неявно также для случая <%# Eval(...) %>, поэтому это не должно представлять проблемы.

Если вам нужен фактический объект, для которого вы привязываетесь, используйте GetDataItem(), поскольку Eval(x) в основном означает DataBinder.Eval(GetDataItem(), x).

Ответ 2

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

Вы пробовали что-то вроде:

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

и

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

Ответ 4

Еще один простой способ сделать это - использовать перегрузку Eval, которая принимает формат, aspx становится:

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