2011-09-02 30 views
7

Tôi đã tìm kiếm trên web và không tìm thấy bất kỳ câu trả lời nào (có một số câu hỏi gần trên tràn ngăn xếp nhưng dường như chúng không được trả lời hoặc giống nhau), vì vậy tôi nghĩ 'd đặt ra một trong những của riêng tôi. Nó xoay quanh các trang cái lồng nhau và một trang nội dung truy cập vào địa chỉ nội dung của chủ ông bà ngay cả khi nó không được tái hiển thị trong tổng thể lồng nhau của cha. Tôi tự hỏi nếu điều này là không thể.Truy cập vào trình giữ chỗ nội dung của ông bà trong trang chính

Lõi Site.Master

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 

     <title> 
       <asp:ContentPlaceHolder ID="TitleContent" runat="server"> 
        <%= Html.GlobalModel().PageTitle %> 
       </asp:ContentPlaceHolder> 
      </title> 

      <asp:ContentPlaceHolder ID="HeadContent" runat="server"> 
      <link rel="shortcut icon" 
       href="<%= ViewContext.ClientContent("Content/Tiki.ico") %>" 
       type="image/x-icon"/> 
     </asp:ContentPlaceHolder> 
    </head> 
    <body> 
     <asp:ContentPlaceHolder ID="SiteContent" runat="server"/> 
    </body> 
</html> 

Nested Site.Master (chú ý cách TitleContent và HeadContent không được tùy chỉnh, do đó 'mặc định' nội dung từ Core Site.Master nên ảnh hưởng)

<%@ Master Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewMasterPage" %> 

<asp:Content ContentPlaceHolderID="SiteContent" runat="server"> 
    <asp:ContentPlaceHolder ID="SiteContent" runat="server"> 

     <h1>Nested Header</h1> 
     <asp:ContentPlaceHolder ID="NestedContent" runat="server"/> 

    </asp:ContentPlaceHolder> 
</asp:ContentPlaceHolder> 

ContentView.aspx (tham khảo Nested Site.Master, việc thay TitleContent cố gắng sẽ không hoạt động.)

<%@ Page Language="C#" MasterPageFile="Site.Master" %> 

<asp:Content ContentPlaceHolderID="NestedContent" runat="server"> 
    <p>Nested content. This will work.</p> 
</asp:Content> 

<asp:Content ContentPlaceHolderID="TitleContent" runat="server"> 
    Nested Title. This will **not** work. 
</asp:Content> 
+0

Vì bạn đang sử dụng MVC, hãy xem Razor. Nó tốt hơn nhiều khi xử lý loại điều này. Tôi chưa tìm thấy giải pháp thỏa đáng cho vấn đề này trong biểu mẫu web. –

+0

Bạn nên ghi nhận Jon Adams bên dưới với câu trả lời. Nó có thể không đẹp, nhưng đó là những gì chúng tôi đang mắc kẹt với ... – McGuireV10

+0

Vâng, tôi có thể cho anh ta tín dụng, nhưng về cơ bản 'trùng lặp' của mã là những gì chúng tôi đã kết thúc và không thực sự là câu trả lời tôi đã hy vọng cho. Nhưng tôi đoán câu trả lời là 'không' là một câu trả lời hợp lệ. Một trong những ngày này khi chúng ta có thời gian để di chuyển đến Razor, tôi sẽ phải kiểm tra sự hỗ trợ của họ. – Terry

Trả lời

6

ContentPlaceHolderID chỉ có thể tham chiếu cha mẹ trực tiếp của chúng khi được liệt kê theo kiểu khai báo.

Sửa chữa dễ dàng nhất, mặc dù không phải là trang nhã nhất, sẽ sao chép các ContentPlaceHolders sang Nested Site.Master với cùng một mã mặc định. Yêu cầu một số mã trùng lặp, nhưng hoàn thành công việc.

<%@ Master Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewMasterPage" %> 

<asp:Content ContentPlaceHolderID="TitleContent" runat="server"> 
    <asp:ContentPlaceHolder ID="NestedTitleContent" runat="server"> 
     <%= Html.GlobalModel().PageTitle %> 
    </asp:ContentPlaceHolder> 
</asp:ContentPlaceHolder> 

<asp:Content ContentPlaceHolderID="SiteContent" runat="server"> 
    <asp:ContentPlaceHolder ID="SiteContent" runat="server"> 
     <h1>Nested Header</h1> 
     <asp:ContentPlaceHolder ID="NestedContent" runat="server"/> 
    </asp:ContentPlaceHolder> 
</asp:ContentPlaceHolder> 

Nếu bạn không muốn làm điều đó, bạn có thể thay thế trình giữ chỗ bằng các điều khiển tùy chỉnh biết nội dung hiển thị khi nào. Hoặc nếu bạn cần giữ nó theo cách này, bạn có thể chạy một loạt mã để buộc hiển thị sớm vào một chuỗi/bộ đệm trong bộ nhớ và thay thế các điều khiển con bằng nó - nhưng đó sẽ là một tấn phức tạp, và đó là nghi ngờ nếu nó sẽ là giá trị nỗ lực.

Nhưng bất kỳ giải pháp nào cũng phụ thuộc vào trường hợp của bạn. Nếu bạn cung cấp thêm ngữ cảnh, chúng tôi có thể cung cấp lời khuyên cụ thể hơn.

Các vấn đề liên quan