【问题标题】:How to update the Page Title in Web Forms from a dynamically populated FormView Control?如何从动态填充的 FormView 控件更新 Web 窗体中的页面标题?
【发布时间】:2014-01-03 22:02:25
【问题描述】:

FormViewTitle 如果您在 ListView 或 FormView 控件 (ASP.NET) 中有标签元素,您将如何更新页面标题,该标签元素将根据您检索的数据而改变。例如一本书的标题。控件将在页面生成后检索标题。我的问题是,有没有办法在页面呈现后更新页面标题或以某种方式将此信息传递给 LabelTitle (ID) 值的 Page.Title?

请帮忙!

这是我的代码简化

    <asp:FormView ID="FormViewTitle" 
            Runat="server" 
            DataSourceID="XmlDataSourceTitle"
            AllowPaging="False">
         <ItemTemplate>                        
             <asp:Label ID="LabelTitle" runat="server" Text="">
                <%#Eval("name") %>
              </asp:Label>
         </ItemTemplate>
      </asp:FormView>
     <asp:XmlDataSource ID="XmlDataSourceTitle" 
               DataFile="BooksTitles.xml"
               TransformFile ="TransformRSS.xslt">                 
     </asp:XmlDataSource>

到目前为止,我已经完成了这个(在后面的代码中)来访问 FormView 控件,但是没有工作:

if (FormViewTitle.CurrentMode == FormViewMode.ReadOnly)        
{
    Label pt = (Label)FormViewTitle.FindControl("LabelTitle");
    this.Page.Title = pt.Text;
}

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    在您的代码Behind Page 类中的更改事件中,您可以尝试以下操作:

    Page.Title = "Change Book Title";
    

    【讨论】:

    • 不,它不是那样工作的。就这么简单。请记住,标题是在页面生成后从 DB 或 XML 文件中检索的。
    • 是的,但是当您更改数据列表中的项目时,您可以触发更改事件并发送标题(或在您的班级中查找标题),在这种情况下您可以更改页面标题, Page.Title=variableBookTitle
    • 感谢您抽出宝贵时间回复。这意味着要访问 ListView 或 FormVew 控件。你会怎么做?可以举个例子吗?
    【解决方案2】:

    好的,这是一个完成您想要的基本示例,我创建了一个简单的 listView 绑定到 Book 对象列表,我为 ItemTemplate 中的每个项目创建一个 Button 并将书名作为命令名称发送,在后面的代码中使用这个标题,我更改了页面的标题,试试吧。 ASPX

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestListView.aspx.cs" Inherits="TestListView" %>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Book Test</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ListView ID="ListView1" runat="server">
                <ItemTemplate>
                    <div>
                        <asp:Label ID="lblTitle" Text='<%# Eval("Title")%>' runat="server" />
                        <asp:Button ID="btnChange" runat="server" CommandName='<%# Eval("Title")%>' Text="Select" OnCommand="btnChange_Command" />
                    </div>
                </ItemTemplate>
            </asp:ListView>
    
        </form>
    </body>
    </html>
    

    代码背后

    using System;
    using System.Collections.Generic;
    using System.Web.UI.WebControls;
    
    public partial class TestListView : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs args)
        {
            if (!IsPostBack)
            {
                var books = new List<Book>
                {
                    new Book {Title = "Book 1"},
                    new Book {Title = "Book 2"},
                    new Book {Title = "Book 3"}
                };
                ListView1.DataSource = books;
                ListView1.DataBind();
            }
        }
    
        protected void btnChange_Command(object sender, CommandEventArgs e)
        {
            Page.Title = e.CommandName;
        }
    
    }
    
    public class Book
    {
        public string Title { get; set; }
    }
    

    【讨论】:

    • 您好 Cesar,非常感谢您为帮助我所做的努力。我运行了你的代码,效果很好,但是有问题。我没有使用任何按钮来启动此事件或命令。也许我没有解释清楚。我想要完成的是:假设用户在主页上并想要导航到另一个页面,其中将显示一本书的标题、图像和描述。我可以将一些信息传递到下一页(标题)并轻松获取页面标题,但我没有这样做。我传递给的唯一参数是 productId。
    • 使用productId,在您的Xml文件中进行XPath搜索以找到书名,您可以在此过程中使用此帖子进行指导。 stackoverflow.com/questions/12951593/…
    • 虽然,你给了我一个好主意来修改一些东西。如果我选择在同一页面中显示其他书籍(调用同一页面),它将非常有用。但是第一次呈现页面时,您的方法不起作用。有没有道理,我在说什么。但再次感谢您对我的帮助。
    • 是的,您可以在同一页面中显示本书的信息,我建议您使用 Ajax。第一次没有选择任何书,所以没有为页面选择标题,但是如果你找到这个是答案,你可以检查它作为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多