如何在代码中使用eval背后一套Page.Title
-
23-09-2019 - |
题
我有一个绑定到ListView控制一个SqlDataSource但欲结合的记录插入到HTML标题属性的地点的部件。这里是我的代码隐藏文件,我想改变,因此它可以使用eval根据数据的内容来构建一个动态的标题:
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中)的,它总是与当前记录的工作原理(通常你在像ListView中一个数据绑定控件显示一个以上的记录)。
所以,当你使用<%# Eval("Price") %>
,您显示当前记录的“价格”列的值。如果您的查询,将返回多个记录更多,那么这将是为每个记录执行,并设置页面标题时(如上图所示),该页面的标题是从最后记录的值。
在另一方面<%= ... %>
,只是一个普通的服务器端代码段(不知道是否存在用于其特定名称),其不知道的数据绑定上下文(例如,其是在当前记录)。
请参阅以下问题了解详情:当应我用#和=在ASP.NET控件?
不隶属于 StackOverflow