質問

私は、ListViewコントロールにバインドされているSqlDataSourceコントロールを持っているが、私はHTMLのTITLE属性にバインドされたレコードの場所の部分にしたいです。ここに私のコードビハインドファイルがある、私はそれがデータの内容に基づいて動的なタイトルを構築するために評価を使用できるように変更することをます:

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

ここでは、対応する.aspxのファイルがあります

<%@ 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>
役に立ちましたか?

解決

あなたはListViewコントロールのItemTemplateに内部以下のどこかに入れて後ろのページのコードの方法(サブ)を呼び出すことができます:

<%# SetPageTitle(Eval("SomeProperty")) %> 
次に、あなたのコードの後ろに(申し訳ありません、それはC#であります):

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

また、あなたはまた、代わりに一つだけの財産を、完全なデータ項目を渡すことができます:

<%# SetPageTitle(Container.DataItem) %> 
<時間>

を更新(あなたのコメントに答えるために):

<%# ... %>は、いわゆるデータバインディング式です。それだけで、データバインドコントロール(あなたの例では、リストビュー)の内部で動作し、それは常に、現在のレコード(通常は、ListViewコントロールなどのデータバインドコントロールで複数のレコードを表示)で動作します。

あなたは<%# Eval("Price") %>を使用するときに、あなたは現在のレコードの「価格」列の値を表示しています。あなたのクエリは、より多くのレコードよりも戻ってくる場合、これは、各レコードに対して実行されるだろう、と(上記のように)ページのタイトルを設定する際に、ページのタイトルは最後のレコードからの値になります。

現在のレコードがあるデータバインディングコンテキストを知っていない、(例えば、一方の<%= ... %>で、普通のサーバー側のコードスニペットである(そのための具体的な名前があるかどうかわかりません) )。

詳細については、次の質問を参照してください:時に必要私は、ASP.NETコントロールで#と=を使用しますか

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top