asp.net - ¿Cómo llamar a Eval en codebehind?
data-binding (4)
¿Has probado algo como:
<asp:Image ID="imgLogo" runat="server'' ImageUrl=''<%# GetImagePath( Convert.ToString( Eval("name") ) ) %>'' />
y
protected string GetImagePath( string image )
{
return "some/logical/path/" + image;
}
¿Cómo diablos llamo a Eval () desde codebehind? Sé que esto es un atajo de front-end para algo como DataBinder.Eval (Container.DataItem, "name"), pero no puedo compilar esta maldita cosa. Me faltan los parámetros apropiados del método, creo. Quiero convertir algo como esto:
<asp:Image ID="imgLogo" runat="server" ImageUrl=''<%# Eval("name") %>''/>
dentro:
<asp:Image ID="imgLogo" runat="server" ImageUrl=''<%# GetImagePath(???) %>''/>
w / code-behind:
protected string GetImagePath(????)
{
//some code
return "some/logical/path" + Eval("name");
}
El control asp: Image está en un repetidor que está vinculado a un SqlDataReader.
Otra forma sencilla de hacer esto es usar la sobrecarga de Eval que toma un formato, el aspx se convierte en:
<asp:Image ID="imgLogo" runat="server" ImageUrl=''<%# Eval("name", "some/logical/path/{0}") %>''/>
Eval
es un método en Page
(en TemplateControl
realidad, lo que significa que también está presente en UserControl
). Así que no necesitas pasar ningún parámetro especial:
protected string GetImagePath()
{
//some code
return "some/logical/path" + Eval("name");
}
Precaución: solo puede llamar a Eval
mientras se realiza el enlace de datos, pero ese es el caso implícito de <%# Eval(...) %>
también, por lo que no debería plantear un problema.
Si desea el objeto real al que está GetDataItem()
, use GetDataItem()
, ya que Eval(x)
básicamente significa 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;
}
}