2009-06-02 22 views
7

मुझे "मास्टर" मास्टरपेज मिला है, और मेरे पास 2 "सब" मास्टरपेज हैं। उन 2 subs में उनकी मास्टरपेज संपत्ति "मास्टर" मास्टरपेज पर सेट है। अब तक सब अच्छा है।मास्टरपेज का उपयोग करके मास्टरपेज, और विरासत

ठीक है, मुझे आज मास्टर मास्टर पेज से सब 1 और सब 2 को "उत्तराधिकारी" बनाने के लिए कहा गया था। मैंने सोचा था कि वे अपने भाषा के साथ अनिश्चित जा रहे थे, लेकिन नहीं, वह मुझे

public partial class Sub2 : TheMaster 

को कक्षा परिभाषा को बदलना चाहते हैं (उन नामों नहीं हैं)।

तो, अब मैं Sub1 और sub2 कि मास्टर पेजेस हैं मिल गया है, और TheMaster का एक मास्टर पृष्ठ है, और यह भी कि वे "TheMaster" के वर्ग कर रहा हूँ

मैं काफी इसके कारण असमंजस के हैं, और यह सुनिश्चित नहीं है कि इसका किस प्रकार के प्रभाव होंगे। ऐसा लगता है कि अभी संकलित और ठीक चल रहा है, लेकिन हम आज इस 6 महीने की परियोजना शुरू कर रहे हैं, और मैं 5 महीने तक नहीं जाना चाहता हूं और पता लगाता हूं कि हमारे पास एक प्रमुख डिजाइन दोष है।

क्या कोई मुझे बता सकता है कि यह बिल्कुल ठीक है, या हम पूरी तरह से गड़बड़ हो गए हैं?

मुझे डर है ... मुझे पकड़ो।

संपादित करें: स्पष्टीकरण - कारण वह मास्टर मास्टर पेज से भी उत्तराधिकारी बनने का कारण यह है कि हमने उस पृष्ठ में कुछ चीजें सेट की हैं, और हम उन्हें उप मास्टर पृष्ठों पर उपलब्ध करना चाहते हैं। साइटमैप में वर्तमान नोड की तरह चीजें जो प्रस्तुत पृष्ठ है, कुछ उपयोगकर्ता खाता सामान, और भी बहुत कुछ।

+0

यह थोड़ा अजीब बात है कि आपके पास मास्टरपेज में मास्टरपेज है। मास्टरपेज में आमतौर पर मुख्य , और टैग शामिल होते हैं। क्या आपके उप-मास्टरपेज में भी वे हैं? – Ropstah

+0

नहीं। मुख्य पृष्ठ में आपके द्वारा उल्लिखित सभी चीजें हैं, साथ ही एक शीर्षलेख और एक पाद लेख, जो पूरी साइट पर स्थिर हैं। उप मास्टर 1 में सामग्री निकाय में 3 कॉलम के लिए एक लेआउट होता है, और उप मास्टर 2 में 2 कॉलम लेआउट होता है (और कुछ अन्य चीजें, वास्तव में) –

उत्तर

1

मूल रूप से आपने जो किया है वह पृष्ठ सेट अप करता है ताकि वर्ग निर्दिष्ट आधार से सभी आइटम प्राप्त कर सके। "मास्टरपेज" संपत्ति का हुकअप एक कमजोर सहयोग बनाता है, और एक विशिष्ट संरचना के अंदर सामग्री प्रस्तुत करता है। आधार से उत्तराधिकारी वर्ग तर्क को आगे बढ़ाता है, जहां इसे निष्पादित करने के बजाए, आप इसे ओवरराइड कर सकते हैं।

अब, इस बारे में सोच के बाद, आप सबसे अधिक संभावना नहीं masterpage संपत्ति सेट चाहते हैं .... लेकिन सिर्फ वर्ग विरासत

+0

ठीक है, लेकिन क्यों? और मैं मास्टर मास्टर पेज में सामग्री क्षेत्रों को कैसे निर्दिष्ट करूं, और फिर उन क्षेत्रों का उपयोग करें और उप मास्टर पृष्ठों में नए सामग्री क्षेत्रों को निर्दिष्ट करें यदि मैं मास्टर पेज प्रॉपर्टी सेट नहीं करना चाहता हूं? –

+0

कुल मिलाकर, यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं, यदि उप पृष्ठों को माता-पिता की विधि कार्यक्षमता को ओवरराइड करने की आवश्यकता है, तो आप थोड़ी सी मुश्किल स्थिति में हैं। यदि आपको केवल जानकारी की आवश्यकता है, तो आइटम को मुख्य पृष्ठ पर सार्वजनिक बनाएं, और इन्हें प्राप्त करने के लिए इस माता-पिता का संदर्भ लें। –

4

यह वास्तव में नेस्ट मास्टर पेजेस करना संभव है - एक संदर्भ के लिए http://msdn.microsoft.com/en-us/library/x2b3ktt7.aspx देखते हैं। टिप्पणी

अनुसार

संपादित मैं अपने उप मास्टर पृष्ठ के पीछे कोड में मुख्य मास्टर पृष्ठ से इनहेरिट किया जाना चाहिए विश्वास नहीं है।

उप मास्टर पृष्ठों सहित प्रत्येक मास्टर पेज को मास्टरपेज से सीधे प्राप्त करना चाहिए, यानी public partial class Sub1 : System.Web.UI.MasterPage

केवल उप मास्टर पेज के एएसपी मार्कअप आप TheMaster.master मास्टर पेज के रूप में चयन, वी.एस. यूआई के माध्यम से परियोजना के लिए अपने उप मास्टर पृष्ठ जोड़ देते हैं तो मुख्य मास्टर पेज को संदर्भित, यानी <%@ Master Language="C#" MasterPageFile="~/TheMaster.master" ... />

होना चाहिए तो आप देखेंगे कि यह कैसे चीजें स्थापित की जाती हैं। मास्टर पेज का उपयोग केवल सामग्री (मार्कअप) के माध्यम से किया जाता है, न कि वर्ग विरासत के माध्यम से।

+0

मुझे पता है कि यह संभव है। मैंने कहा कि मेरी पोस्ट में। मैंने आपको बताया कि मैंने इसे कैसे स्थापित किया है और कहा कि यह कैसे काम कर रहा था। मेरे प्रश्नों की अपेक्षा अधिक थी कि क्या मैं एक मास्टर पेज निर्दिष्ट कर रहा हूं और उसी मास्टर पेज से विरासत में हूं? "मास्टर पेज उपयोग के लिए –

+0

+1 केवल सामग्री (मार्कअप) के माध्यम से, और वर्ग विरासत के माध्यम से नहीं बनाया गया है।" इससे मुझे मास्टर पेजों में कक्षा तर्क फिट करने की कोशिश करने पर अधिक समय बर्बाद करने में मदद मिली। – palswim

2

मैं बस इसमें भाग गया, और उन विशिष्ट समस्याओं को जोड़ना चाहता था जिन्हें आप मास्टर पेजों से विरासत में प्राप्त करते समय भी चलाएंगे, जिन्हें आप घोंसले भी कर रहे हैं। उदाहरण के लिए, BaseMaster.master में निम्न कोड।सीएस:

//BaseMaster.master.cs 
public String FooLabelText 
{ 
    get { return FooLabel.Text; } 
    set { FooLabel.Text = value; } 
} 

जब अपने विरासत में मिला पेज से कहा जाता है एक NullReferenceException फेंक देते हैं। FooLabel (आपके BaseMaster.master फ़ाइल में एक लेबल) नेस्टेड मास्टर पेज (SubMaster.master) में मौजूद नहीं है, इसलिए यदि आप उस संपत्ति तक पहुंचते हैं तो यह टूट जाएगा।

आप इस के चारों ओर अपने उपवर्ग और में संपत्ति overridding मिल सकता है यह मास्टर पृष्ठ आप में नेस्ट रहे हैं करने के लिए फिर से निर्देशन, लेकिन यह वास्तव में नेट मास्टर पृष्ठों का डिज़ाइन दर्शन टूट जाता है:

//SubMaster.master.cs inherits from BaseMaster 
new public String FooLabelText 
{ 
    get { return (Master as BaseMaster).FooLabel.Text; } 
    set { (Master as BaseMaster).FooLabel.Text = value; } 
} 

ध्यान दें कि मैं base.FooLabel का उपयोग नहीं कर रहा हूं, लेकिन Master.FooLabel, जो वास्तव में एक अलग वस्तु को इंगित कर रहा है। सबसे अच्छा, यह एक हैक है, और कई मामलों में यह अधिक काम और नकल बनाने जा रहा है।

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

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