Asp.net
訪問母版頁中的祖父母內容佔位符
我一直在網上搜尋並沒有找到任何答案(關於堆棧溢出有幾個很接近的問題,但它們似乎沒有得到回答或相同),所以我想我會提出自己的一個。它圍繞嵌套母版頁和訪問祖父母版的 Content PlaceHolder 的內容頁面,即使它沒有在父嵌套母版中*重新公開。*我想知道這是否不可能。
核心站點.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>嵌套的 Site.Master(請注意 TitleContent 和 HeadContent 沒有自定義,因此 Core Site.Master 中的“預設”內容應該生效)
<%@ 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(引用 Nested Site.Master,嘗試的 TitleContent 替換將不起作用。)
<%@ 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>
ContentPlaceHolderID 只能在以聲明方式列出時引用其直接父級。
最簡單的解決方法(雖然不是最優雅的)是使用相同的預設程式碼將 ContentPlaceHolders 複製到**Nested Site.Master 。**需要一些程式碼重複,但可以完成工作。
<%@ 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>如果您不想這樣做,您可以用知道何時顯示什麼的自定義控制項替換佔位符。
或者如果你需要保持這種方式,你可以執行一堆程式碼來強制提前渲染到記憶體中的字元串/緩衝區並用它替換子控制項——但這會很麻煩,如果它是值得懷疑的值得付出努力。
但是這些解決方案中的任何一個都取決於您的情況。如果您提供更多上下文,我們可以提供更具體的建議。