Как позвонить 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.
Ответы
Ответ 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}") %>'/>