2010-02-19 16 views
7

Tôi đã đọc qua một số bài đăng/bài viết về cách thực hiện việc này và tôi vẫn không nhận được tiêu đề trang từ trang nội dung. Các trang của tôi hiển thị OK ngoại trừ tôi không thể lấy tiêu đề được đặt từ trang nội dung (tất cả các trang đều có Tiêu đề được đặt theo trang chính). Dưới đây là codebehind cho trang chủ của tôi:Cách đặt Tiêu đề của Trang từ trang nội dung web trong ASP.NET 3.5

Partial Class zSEO 
Inherits System.Web.UI.MasterPage 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
     Page.Header.Title = "Dynamically set in Master page" 
    End Sub 
End Class 

Dưới đây là phần còn lại của trang chủ:

<%@ Master Language="VB" 
EnableTheming="true" 
Inherits="zSEO" 
CodeFile="zSEO.master.vb" %> 
<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
    <head id="Head1" runat="server"> 
     <title></title> 
    </head> 
<body> 
<form id="form1" runat="server">  

<div id="container"> 
    <div id="content"> 
     <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> 
     </asp:contentplaceholder> 
    </div>  
</div>  
</form> 
</body> 
</html> 

Tuy nhiên, đó là trong trang nội dung web mà tôi muốn thiết lập giá trị của cho trang và tôi đã đặt này trong trang nội dung thử nghiệm của tôi:

Public Partial Class zShowAd 
Inherits System.Web.UI.Page 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    Page.Header.Title = "Dynamically set TITLE value in the content(child) page" 
End Sub 

End Class 

Kỳ lạ thay, tôi không thể có được debugger để dừng lại trên dòng trên trong trang nội dung - chỉ trên correspon dòng ding trong trang chính. Rõ ràng, tôi bối rối về điều này.

Tôi đã đọc có nhiều cách khác để làm điều này nhưng điều này dường như có thể thực hiện được từ những gì tôi đọc tại hướng dẫn của Scott Mitchell tại: Dynamically setting the Page Title in ASP.NET. Cụ thể, tôi đã cố gắng làm theo điều này từ bài viết: "Hơn nữa, nếu bạn đang sử dụng trang chính, mã này có thể hoạt động, như được viết, từ trang cái hoặc trang ASP.NET sử dụng trang chính. một kịch bản, khu vực phải được xác định trong trang chính, nhưng trang ASP.NET vẫn có thể truy cập nó thông qua Page.Header. "

Trả lời

10

Vì vậy, những gì cần phải xảy ra là này

MasterPage.Master

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
    Me.Page.Title = "Dynamically set in Master page" 
End Sub 

Default.aspx

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Me.Page.Title = "Dynamically set in ASPX page" 
End Sub 

Bằng cách này tiêu đề trang chủ của bạn được thiết lập trước khi nội dung của bạn tiêu đề trang. Nếu bạn không đặt tiêu đề từ trang nội dung, trang chính sẽ là tiêu đề mặc định. Nếu bạn đặt tiêu đề từ trang nội dung thì nó sẽ ghi đè lên nó.

+1

Cảm ơn các bạn. Tôi nghĩ rằng đó là một chút phản trực giác rằng Page_Load của trang chính sẽ đến SAU KHI Page_Load của trang nội dung nhưng bây giờ nghĩ về trang chủ giống như một điều khiển người dùng nó có ý nghĩa hơn. BTW, tôi đã bỏ bê "Handles Me.Load" trên Page_Load trong tệp .aspx và ngay sau khi tôi thêm nó, thì trình gỡ rối dừng lại ở đó trên một điểm ngắt. Cảm ơn nhiều. –

3

Bạn phải nhớ rằng MasterPage là một điều khiển con của Trang, vì vậy các sự kiện OnLoad kích hoạt sau sự kiện của OnLoad của Trang.

Trong trường hợp/ví dụ của bạn, trang sẽ đặt tiêu đề, sau đó trang chính sẽ đặt lại sau đó. Hoặc đặt nó sau này trong vòng đời hoặc quấn một số logic hơn xung quanh những người đặt nó có lẽ?

Scott Allen có một bài viết hay về chủ đề này, cụ thể là give it a quick read to get a feel for the lifecycle order.

6

Vấn đề là phương thức Page_Load trong trang chạy trước phương thức Page_Load trong điều khiển người dùng trong trang và trang chính thực sự là điều khiển người dùng.

Bạn có thể sử dụng phương pháp Page_Init trong trang chính thay thế.

0

một giải pháp khác mà đôi khi tôi sử dụng là đặt một trình giữ chỗ giữa các thẻ tiêu đề trên trang chính, sau đó bạn có thể sử dụng điều khiển nhãn trong thẻ nội dung và hiển thị nó.

theo cách đó bạn có thể đặt tiêu đề cho trang sau khi điều khiển đã đăng lại, chẳng hạn.

2

Tôi cũng gặp sự cố này. Tôi không thể chỉnh sửa các tập tin tổng thể (quá nhiều tác dụng phụ có thể), vì vậy tôi sử dụng phương pháp trang PreRender(), mà cháy sau các trang chủ Page_Load()

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    Page.Title = Page.Title + " - server error 500"; 
} 
2

giải pháp đơn giản hơn trong Master trang <%: Page.Title%> - tiêu đề chính ở đây

trong dòng trang đầu tiên của nội dung <% @ Page Title = "Tên sách của bạn" Ngôn ngữ = "C#" MasterPageFile = "~/_masterpages/.. .vv

0

để kết hợp Trang Tiêu đề với MasterPage mặc định của bạn Tiêu đề bạn có thể sử dụng mẫu chuẩn mặc định ASP.NET sử dụng mẫu ứng dụng web.

<head runat="server"> 
    <title > <%: Page.Title %> | Portal Main site Name </title> 

cách này Page.Title này được đọc các trang cá nhân hình thức

<%@ Page Title="Virtual Machines" ...>