Почему не D-шина? Это - очень простая система передачи сообщений, которая работает почти на всех платформах и разработана для устойчивости. Это поддерживается в значительной степени каждым языком сценариев в этой точке.
Eval
- это метод на странице
(фактически на TemplateControl
, что означает, что он также присутствует в UserControl
). Таким образом, вам не нужно передавать какие-либо специальные параметры:
protected string GetImagePath()
{
//some code
return "some/logical/path" + Eval("name");
}
Внимание: вы можете вызывать Eval
только во время привязки данных, но это неявно так для <% # Eval (...)% >
тоже, так что это не должно создавать проблемы.
Если вам нужен реальный объект, к которому вы привязываетесь, используйте GetDataItem ()
, как Eval (x)
в основном означает DataBinder.Eval (GetDataItem (), x)
.
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;
}
}
Другой простой способ сделать это - использовать перегрузку Eval, которая принимает формат, aspx становится следующим:
<asp:Image ID="imgLogo" runat="server" ImageUrl='<%# Eval("name", "some/logical/path/{0}") %>'/>
Вы пробовали что-то вроде:
<asp:Image ID="imgLogo" runat="server' ImageUrl='<%# GetImagePath( Convert.ToString( Eval("name") ) ) %>' />
и
protected string GetImagePath( string image )
{
return "some/logical/path/" + image;
}