2011-09-02 13 views
7

मैं वेब खोज रहा हूं और कोई जवाब नहीं ढूंढ रहा हूं (स्टैक ओवरफ़्लो पर कुछ करीबी प्रश्न थे लेकिन उन्हें उत्तर देने या समान होने की प्रतीत नहीं हुई), इसलिए मैंने सोचा कि मैं मेरे खुद में से एक बनाओ। यह नेस्टेड मास्टर पेजों के चारों ओर घूमता है और दादाजी मास्टर के कंटेंट प्लेसहोल्डर तक पहुंचने वाला एक सामग्री पृष्ठ है, भले ही यह माता-पिता नेस्टेड मास्टर में को फिर से उजागर न किया जाए। मैं सोच रहा हूं कि यह संभव नहीं है।मास्टर पेजों में दादा-दादी सामग्री प्लेसहोल्डर तक पहुंच

कोर 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> 

नेस्टेड Site.Master (ध्यान दें कि किस TitleContent और HeadContent अनुकूलित नहीं कर रहे थे, इसलिए कोर 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 (नेस्ट 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> 
+0

चूंकि आप एमवीसी का उपयोग कर रहे हैं, तो रेजर पर एक नज़र डालें। इस प्रकार की चीज़ को संभालने के बारे में यह बहुत बेहतर है। मुझे अभी तक वेबफॉर्म में इस समस्या का संतोषजनक समाधान नहीं मिला है। –

+0

आपको जवाब के साथ नीचे जॉन एडम्स क्रेडिट करना चाहिए। यह सुंदर नहीं हो सकता है, लेकिन यह वही है जो हम फंस गए हैं ... – McGuireV10

+0

ठीक है, मैं उसे क्रेडिट दे सकता हूं, लेकिन अनिवार्य रूप से कोड का 'डुप्लिकेशंस' है जिसे हम समाप्त कर चुके हैं और वास्तव में वह जवाब नहीं था जिसे मैं उम्मीद कर रहा था के लिये। लेकिन मुझे लगता है कि 'नहीं' का जवाब एक वैध जवाब है। इन दिनों में से एक जब हमारे पास रेजर में माइग्रेट करने का समय है तो मुझे अपना समर्थन देखना होगा। – Terry

उत्तर

6

ContentPlaceHolderIDs केवल सूचीबद्ध होने पर उनके तत्काल माता-पिता का संदर्भ दे सकता है।

सबसे आसान फिक्स, हालांकि सबसे सुरुचिपूर्ण नहीं है, सामग्री प्लेसहोल्डर को नेस्टेड साइट पर कॉपी करना होगा। उसी डिफ़ॉल्ट कोड के साथ मस्टर। कुछ कोड डुप्लिकेशन की आवश्यकता है, लेकिन काम पूरा हो जाता है।

<%@ 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> 

आप ऐसा नहीं करना चाहते हैं, तो आप कस्टम नियंत्रण पता है कि क्या जब दिखाने के लिए साथ प्लेसहोल्डर बदल सकते थे।

या यदि आपको इसे इस तरह से रखने की आवश्यकता है, तो आप इन-मेमोरी स्ट्रिंग/बफर में प्रारंभिक प्रतिपादन को मजबूर करने के लिए कोड का एक गुच्छा चला सकते हैं और इसके साथ बाल नियंत्रण को प्रतिस्थापित कर सकते हैं - लेकिन यह परेशानी का एक टन होगा, और यह संदिग्ध है अगर यह प्रयास के लायक होगा।

लेकिन इनमें से कोई भी समाधान आपकी स्थिति पर निर्भर करता है। यदि आपने अधिक संदर्भ प्रदान किया है, तो हम अधिक विशिष्ट सलाह प्रदान कर सकते हैं।

संबंधित मुद्दे