Frage

Ich habe eine SQLDataSource gebunden ist, um ein ListView-Steuerelement, aber ich möchte Platz teilen des gebundenen Datensatzes in das HTML-Attribut TITLE.Hier ist mein codebehind-Datei, die ich ändern möchte, so kann es mit Eval zu konstruieren, die eine dynamische TITEL basiert auf den Daten-Inhalt:

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

Hier ist die entsprechende .aspx-Datei:

<%@ 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>
War es hilfreich?

Lösung

Sie können eine Methode aufrufen (Sub) von der Seite des code-behind, indem Sie die folgenden irgendwo in der ItemTemplate Ihrer ListView:

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

Dann in Ihrem code hinter (sorry, es ist in C#):

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

Alternativ können Sie auch die komplette Daten-Element, anstatt nur eine Eigenschaft:

<%# SetPageTitle(Container.DataItem) %> 

Update (zu beantworten, Ihren Kommentar):

<%# ... %> ist ein sogenannter data-binding expression.Es funktioniert nur innerhalb der einem datengebundenen Steuerelement (ListView in Ihrem Beispiel) und es funktioniert immer mit dem aktuellen Datensatz (in der Regel werden zeigen Sie mehr als einen Datensatz in einem datengebundenen Steuerelement wie das ListView).

So, wenn Sie verwenden <%# Eval("Price") %>, Sie zeigt den Wert des aktuellen Datensatzes "Preis" - Spalte.Wenn Ihre Abfrage, zurückkehren würde, mehr als einen Datensatz, dann wird diese ausgeführt werden würden, für jeden Datensatz, und wenn die Einstellung den Titel der Seite (wie oben gezeigt), die Seite den Titel wäre der Wert aus dem letzten Datensatz.

Auf der anderen Seite <%= ... %>, ist einfach nur ein normaler server-side-code-snippet (weiß nicht, ob es einen bestimmten Namen für Sie, die nicht wissen, über die data-binding-Kontext (z.B.was ist der aktuelle Datensatz).

Bitte sehen Sie sich die folgende Frage für weitere details: Wann sollte ich # und = in ASP.NET Kontrollen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top