asp.net .net data-binding eval

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; } }