Question

J'ai un SQLDataSource qui est lié à un contrôle ListView mais je veux placer les pièces du dossier lié dans l'attribut TITLE HTML. Voici mon fichier codebehind que je veux changer peut alors utiliser Eval pour construire un titre dynamique en fonction du contenu des données:

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

Voici le fichier .aspx correspondant:

<%@ 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>
Était-ce utile?

La solution

Vous pouvez appeler une méthode (Sub) du code de la page derrière en mettant ce qui suit quelque part à l'intérieur du ItemTemplate de votre ListView:

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

Ensuite, dans votre code derrière (désolé il est en C #):

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

Vous pouvez également passer l'élément de données complète, au lieu d'une propriété:

<%# SetPageTitle(Container.DataItem) %> 

Mise à jour (pour répondre à votre commentaire):

<%# ... %> est un soi-disant expression de liaison de données. Il fonctionne seulement à l'intérieur d'un contrôle lié aux données (ListView dans votre exemple) et il fonctionne toujours avec l'enregistrement en cours (généralement vous affichez plus d'un enregistrement dans un contrôle lié aux données comme le ListView).

Ainsi, lorsque vous utilisez <%# Eval("Price") %>, vous affichez la valeur de la colonne « prix » de l'enregistrement en cours. Si votre requête, retournerait plus d'un enregistrement, alors ce serait exécuté pour chaque enregistrement, et lors du réglage du titre de la page (comme indiqué ci-dessus), le titre de la page serait la valeur du dernier enregistrement.

Par contre <%= ... %>, est juste un extrait normal code côté serveur (ne sais pas s'il y a un nom particulier), qui ne connaît pas le contexte de liaison de données (par exemple, qui est l'enregistrement en cours ).

S'il vous plaît voir la question suivante pour plus de détails: Quand faut-il J'utilise # et = dans les contrôles ASP.NET?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top