2010-04-27 6 views
8

मैंने अपने मूल प्रश्न के लिए दो सुझाव देखे हैं कि उपयोगकर्ता नियंत्रण में सामग्री क्षेत्र को परिभाषित करना संभव है या कुछ उपयोगी सुझाव हैं यानीएएसपी.Net: सामग्री क्षेत्र के साथ उपयोगकर्ता नियंत्रण, यह स्पष्ट रूप से संभव है लेकिन मुझे कुछ विवरणों की आवश्यकता है

Passing in content to ASP.NET user control

और

ASP.NET User Control inner content

अब, बाद बेहतर के सिद्धांत मैं की तरह केवल सौंदर्य कारणों से पूर्व की तुलना में। ऐसा लगता है कि मुझे अधिक समझ में आता है लेकिन दिया गया उदाहरण दो चर सामग्री और टेम्पलेट का उपयोग करता है सामग्री जो उत्तरदाता ने अपने उदाहरण कोड में परिभाषित नहीं किया है। इन विवरणों के बिना मैंने पाया है कि उदाहरण काम नहीं करता है। मुझे लगता है कि वे नियंत्रण के गुण हैं? या कुछ ऐसे?

संपादित करें - विवरण: क्या मैं

मैं एक ASP.Net उपयोगकर्ता नियंत्रण है कि एक प्लेसहोल्डर के अंदर एक पैनल में कुछ सामग्री छिपा है और एक में एक कोड के इनपुट के लिए पूछता है की जरूरत है ऐसा करने के लिए कोशिश कर रहा हूँ दृश्य पैनल

अनिवार्य रूप से उपयोगकर्ता पैनल ए में दिए गए टेक्स्टबॉक्स में अपना कोड डाल देगा और इसे सबमिट करेगा, यह चेक किया जाएगा और, यदि यह मान्य है, तो पैनल बी और लॉक की गई सामग्री प्रदर्शित की जाएगी।

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

कोई अन्य व्यावहारिक समाधान भी स्वागत है।

संपादित करें नोट: मैंने किया था समाधान 2.0 में मैं इस लागू करने के लिए कोशिश कर रहा हूँ एक 3.5 समाधान जो मैं उपयोग नहीं कर सकते हैं।

पूर्व उदाहरण व्यावहारिक लगता है, लेकिन मैं उत्तरार्द्ध साथ जाने के लिए अगर किसी को मेरे लिए रिक्त स्थान को भरने सकता है पसंद करेंगे।

धन्यवाद।

उत्तर

22

ठीक है, तो यह बेहद आसान है लेकिन वेब पर कई ट्यूटोरियल जो इस तरह की चीज के बारे में बात करते हैं, वे असाधारण चीजों को करने के लिए दबाव डालते हैं जिनके लिए ListItems या इस तरह के विश्लेषण को नियंत्रित करने की आवश्यकता होती है।

तो यह समाधान पूरी तरह से है ताकि आप एक नियंत्रण बना सकें, किसी भी कारण से, इसमें प्लेसहोल्डर है जिसमें इसके अंदर कुछ भी हो सकता है (एक मास्टर पेज पर सामग्री क्षेत्र की तरह)। इस उदाहरण में यह जब तक उपयुक्त इनपुट कार्यों एक और पैनल में जगह ले लिया है क्योंकि प्लेसहोल्डर युक्त पैनल छिपा हुआ है होता है।

सबसे पहले, आप इस जोड़ने की जरूरत:

[ParseChildren(true,"Content")] 
[PersistChildren(false)] 
बस नियंत्रण जो इस तरह दिखता है के भाग के ऊपर

:

public partial class MyControl : System.Web.UI.UserControl 

तो नियंत्रण में नियंत्रण के सिर पर घोषणाओं scoped आप इस प्रकार घोषित करना चाहते हैं:

private Control _content; 

[PersistenceMode(PersistenceMode.InnerProperty)] 
public Control Content { get { return _content; } set { _content = value; } } 

अंत में आपको सामग्री को जगह में रखना होगा धारक इस तरह:

phContent.Controls.Add((Control)_content); 

वह अंतिम पंक्ति पेज_इनिट घटना में जाती है। संदर्भ "phContent" के लिए जगह धारक जहाँ आप सामग्री प्रदर्शित करना चाहते हैं के नाम, इस तरह है:

<asp:Panel ID="pnlLockable" runat="server" Visible="False"> 
<asp:Placeholder runat="server" ID="phContent" /> 
</asp:Panel> 

मोर्चे पर जिसके परिणामस्वरूप कार्यान्वयन इस तरह दिखता है अंत:

<uc:MyControl runat="server" ID="lockit1"> 
<Content> 
//...your stuff goes here... 
</Content> 
<uc:MyControl> 

ध्यान दें कि मुझे लगता है कि सामग्री टैग के बीच क्या है एक मूल नियंत्रण है। ऐसा इसलिए है क्योंकि मैंने वहां एक और उपयोगकर्ता नियंत्रण निहित किया था। मुझे कल्पना है कि अगर आप किसी भी पैनल या प्लेसहोल्डर के भीतर जो भी सामग्री चाहते हैं उसे ठीक करना चाहिए।

+3

शब्दों का उपयोग करके "परेशान आसान" के लिए +1। – NotMe

+0

धन्यवाद। मुझे अक्सर लगता है कि कुछ उचित जटिल ऑनलाइन ट्यूटोरियल करने की कोशिश में अक्सर चरम पर सरल उलझन के स्पष्टीकरण प्रस्तुत करते हैं। अंत में इस farly स्पष्ट एक बार आप अंतर्निहित अवधारणाओं समझा लेकिन मैं वास्तव में कभी अवधारणाओं के बारे में सोचा था, इसलिए सभी ट्यूटोरियल है कि आप टेम्पलेट रिपीटर्स और bespoke सूची बनाने के लिए कैसे पता चलता है, क्योंकि मैं नहीं बता सकते हैं सिर्फ उपयुक्त नहीं थे क्या न्यूनतम न्यूनतम कार्यान्वयन था। इसलिए परेशान आसान। – bert

+0

ब्रिलेंट! मैं हालांकि अपने आप को यह जब मैं इसे देखा भी परेशान आसान था .. सामग्री संपत्ति, सामग्री संपत्ति पर एक "प्लेसहोल्डर" "[PersistenceMode (PersistenceMode.InnerProperty)]" का उपयोग करें, और उपयोग को रोकने के लिए के लिए एक "नियंत्रण" के बजाय – Rushino

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

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