Pregunta

Tengo un SQLDataSource que está enlazado a un control ListView, pero quiero poner partes del registro encuadernado en el atributo TITLE de HTML. Aquí está mi archivo de código subyacente que yo quiero cambiar lo que se puede utilizar para construir una Eval TÍTULO dinámico basado en el contenido de los datos:

Public Partial Class zShowAd
Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.Page.Title = " Dynamically set in ASPX page" 
        'how to use Eval here instead of the above constant ??    
    End Sub
End Class

Aquí está el archivo .aspx correspondiente:

<%@ Page Language="vb" AutoEventWireup="false" MasterPageFile="~/zSEO.master" 
  CodeBehind="zShowAd.aspx.vb" Inherits="Zipeee.zShowAd" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div>
  <asp:ListView ID="ShowAd" runat="server" DataSourceID="aPosting">
    <LayoutTemplate>
      <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
    </LayoutTemplate>
   <ItemTemplate>
   <div>
    <div id="wrapper"> 
        <div id="header"></div> 
        <div id="main"> 
            <div id="nav">    AdID: <%#Eval("AdID")%></div> 
            <div id="extras">Price: <%#Eval("Price")%></div> 
            <div id="content">      <%#Eval("AdDesc")%></div> 
        </div> 
        <div id="footer"></div> 
    </div>
   </div>
  </ItemTemplate>
 </asp:ListView>

 <asp:sqldatasource runat="server" id="aPosting"
        ConnectionString="<%$ ConnectionStrings:ZIPeeeConnectionString2 %>" 
        SelectCommand="spGetAdByID" SelectCommandType="StoredProcedure">
        <SelectParameters>
            <asp:QueryStringParameter Name="AdId" QueryStringField="a" Type="String" />
        </SelectParameters>
    </asp:sqldatasource>
</div>
</asp:Content>
¿Fue útil?

Solución

Puede llamar a un método (Sub) del código de la página detrás colocando lo siguiente en algún lugar dentro de su ItemTemplate ListView:

<%# SetPageTitle(Eval("SomeProperty")) %> 

A continuación, en su código detrás (lo siento es en C #):

protected void SetPageTitle(object title)
{
  this.Title = title.ToString();
}

Como alternativa, también puede pasar el elemento de datos completa, en lugar de sólo una propiedad:

<%# SetPageTitle(Container.DataItem) %> 

Actualizar (para responder a su comentario):

<%# ... %> es un llamado expresión de enlace de datos. Sólo funciona en el interior de un control enlazado a datos (ListView en su ejemplo) y se trabaja siempre con el registro actual (por lo general mostrar más de un registro en un control enlazado a datos como el ListView).

Así que cuando se utiliza <%# Eval("Price") %>, que está visualizando el valor de la columna "Precio" del registro actual. Si la consulta, volvería más de un registro, entonces esto sería ejecutado para cada registro, y cuando se pone el título de la página (como se muestra arriba), el título de la página sería el valor del último registro.

Por otro lado <%= ... %>, es sólo un fragmento normal de código del lado del servidor (no sé si hay un nombre específico para ello), que no conoce acerca del contexto de enlace de datos (por ejemplo, que es el registro actual ).

Por favor, vea la siguiente pregunta para más detalles: Cuándo debe yo uso # y = en controles ASP.NET?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top