2009-02-24 28 views

Trả lời

9

Chỉ cần kiểm tra điều này và nó hoạt động từ PreInit của trang đang sử dụng MasterPage lồng nhau.

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    this.Master.MasterPageFile = "/Site2.Master"; 
} 

Rõ ràng bạn sẽ cần đảm bảo rằng ContentPlaceholderIds nhất quán trên các trang bạn đang trao đổi giữa.

+0

Hmm vâng, đó là một giải pháp. Thật không may, có nghĩa là đặt mã trong mỗi trang sử dụng trang chính thay vì ở một nơi. Tôi không chắc chắn đó là ít nhất của hai tệ nạn ... sao chép trang Master để có hai bản sao sẽ được ít hơn nhiều công việc! –

3

Chúng tôi kết hợp phương thức của Andy với lớp "BasePage" - chúng tôi tạo một lớp kế thừa từ System.Web.UI.Page và sau đó tất cả các trang của chúng tôi được kế thừa từ lớp này. Sau đó, trong lớp cơ sở của chúng tôi, chúng tôi có thể thực hiện các kiểm tra có liên quan để xem trang gốc nào sẽ được sử dụng - trong trường hợp của chúng tôi, chúng tôi có một bản trình bày "" Bản trình bày, và bản chính "Bản trình bày" tất cả các điều hướng và trang đồ nội thất, cùng với CSS hiển thị nặng, trong khi chủ tác giả có thêm JS cho các công cụ authoring, CSS nhẹ hơn và không điều hướng (đó là những gì chúng tôi sử dụng khi người dùng thực sự là tác giả của một trang, thay vì sửa đổi bố trí trang web).

Trang cơ sở này sau đó có thể gọi Page.Master.MasterPageFile và đặt nó vào Thạc sĩ tác giả nếu đó là trạng thái chính xác cho trang.

2

Chỉ trong trường hợp bất kỳ ai tình cờ gặp phải điều này và hãy kiểm soát nội dung của "nội dung trong trang nội dung hoặc trang cái lồng nhau tham chiếu trang chủ" khi thử mã của Andy , hãy loại bỏ số this.Master. Vì vậy, mã trở thành:

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    MasterPageFile = "/Site2.Master"; 
} 

Sửa Như Zhaph chỉ ra dưới đây, đoạn code tôi có ^^ chỉ có sẽ thay đổi tổng thể của trang hiện tại, chứ không phải tổng thể của tổng thể. Đây là mã Hainesy đã nói về khi ông đề cập đến "tất cả chúng ta đều biết về việc thay đổi một trang chủ động" (mà tôi đã không, d'oh). Nếu bạn tình cờ truy cập trang này bằng cách googling "trang chủ thay đổi ngăn xếp ngăn xếp" (đó là những gì tôi đã làm) thì đây có thể là mã bạn đang tìm kiếm :-)

+0

Nhưng điều đó sẽ chỉ thay đổi trang cái bên trong, chứ không phải cái bên ngoài, đó là những gì Hainesy muốn. Tôi muốn nói rằng bạn có một vấn đề với một bậc thầy bên ngoài mà không có tất cả các trình giữ chỗ cần thiết cho chủ nhân bên trong. –

+0

Ahh, gotcha.Tôi đã có kết thúc sai trái của cây gậy này, xin lỗi. Tôi đã có trang tiêu chuẩn chứng khoán với một trang cái, chứ không phải là một trang cái lồng nhau. Điều đó sẽ dạy tôi đọc và suy nghĩ đầu tiên :-) –

+0

Đừng lo lắng, +1 cho chỉnh sửa của bạn :) –

0

Để thêm vào câu trả lời của Zhaph - Ben Duguid, (+1 nhân tiện):

Dưới đây là mã ví dụ đặt trang chính của trang cái lồng nhau. Tất cả các trang được kế thừa từ BasePage này, vì vậy mã này chỉ tồn tại ở một nơi.

public class BasePage : System.Web.UI.Page 
{ 
    private void Page_PreInit(object sender, System.EventArgs e) 
    { 
     if (Request.Browser.IsMobileDevice) 
     { 
      if (Page.MasterPageFile == "~/master/nested.master")) 
      { 
       Page.Master.MasterPageFile = "~/master/mobile.master"; 
      } 
      else 
      { 
       MasterPageFile = "~/master/mobile.master"; 
      } 
     } 
    } 
} 
Các vấn đề liên quan