2010-03-01 5 views
2

ListView 컨트롤에 바인딩 된 SQLDataSource를 가지고 있지만 바인딩 된 레코드의 일부를 HTML TITLE 특성에 배치하려고합니다. 여기Codebehind에서 Eval을 사용하여 Page.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> 

답변

8

당신은 할 수 여기에 지금은 데이터 내용에 따라 동적 TITLE를 구성하는 평가를 사용하여 변경할 내 코드 숨김 파일입니다 당신의 ListView의 ItemTemplate을 내부의 어딘가에 다음을 넣어 뒤에 페이지의 코드하는 방법 (하위)로 전화 : 뒤에 코드에서 다음

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

(죄송는 C#으로의) :

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

또는, 당신은 또한 대신 하나 개의 속성의 완전한 데이터 항목을 전달할 수 있습니다

<%# SetPageTitle(Container.DataItem) %> 

업데이트를 (귀하의 코멘트에 대답) :

<%# ... %>가 너무입니다 -called 데이터 바인딩 표현식. 데이터 바인딩 된 컨트롤 (예제에서는 ListView) 내부에서만 작동하며 현재 레코드 (일반적으로 ListView와 같은 데이터 바인딩 된 컨트롤에 둘 이상의 레코드 표시)로 항상 작동합니다.

따라서 <%# Eval("Price") %>을 사용하면 현재 레코드의 "가격"열의 값이 표시됩니다. 당신의 질의가 두 개 이상의 레코드를 반환한다면, 이것은 각 레코드에 대해 실행될 것이며, 페이지 제목을 설정할 때 (위 그림과 같이) 페이지의 제목은 마지막 레코드의 값이됩니다.

반면에 은 데이터 바인딩 컨텍스트에 대해 알지 못하는 일반적인 서버 측 코드 단편입니다 (특정 이름이 있는지 모름) (예 : 현재 기록).

자세한 내용은 다음 질문을 참조하십시오. When should I use # and = in ASP.NET controls?

+1

고맙습니다. 나는이 구문이 왜 좋은지에 대한 좋은 설명을 발견하지 못했습니다. %% SetPageTitle (Eval ("SomeProperty")) %> 대이 구문은 다음과 같습니다. <% SetPageTitle (Eval ("SomeProperty")) %> 고전적인 ASP 배경에서 나온 두 번째 형식은 괜찮은 것 같습니다. 명령문에 Eval이 포함되어 있기 때문에 # (바인딩 심볼이라고하는 것)이 필요합니까? –

+0

@ 존 : 업데이트 된 답변의 차이점을 설명하려고했습니다. – M4N

+2

정말 대단한 설명입니다! 고맙습니다. –