किसी सामग्री पृष्ठ से मास्टर पेज पर .NET तत्व का उपयोग कैसे करें?

क्या मास्टर के लिए ContentPlaceHolder में लोड किए गए पृष्ठ से मास्टर पेज पर किसी तत्व को एक्सेस करना संभव है?

मेरे पास एक सूची दृश्य है जो मास्टर पेज पर नेविगेशन क्षेत्र में लोगों के नाम सूचीबद्ध करता है। सूची में एक व्यक्ति को उस तालिका में जोड़ा जाने के बाद मैं सूची दृश्य को अपडेट करना चाहता हूं, जिसमें सूची दृश्य डेटा से जुड़ा हुआ है। ListView वर्तमान में कैश को फिर से लोड होने तक इसके मानों को अपडेट नहीं करता है। हमने पाया है कि ListView.DataBind() फिर से चलाना एक सूचीदृश्य की सामग्री अपडेट करेगा। हम मास्टर पेज का उपयोग करने वाले पृष्ठ पर ListView.DataBind() चलाने में सक्षम नहीं हैं।

नीचे एक नमूना है जो मैं करना चाहता था लेकिन एक कंपाइलर त्रुटि कहती है

"PeopleListView वर्तमान संदर्भ में मौजूद नहीं है"

जीआईएस.मास्टर - जहां ListView रहता है

...

GISInput_People.aspx - GIS.master का मास्टर पेज के रूप में उपयोग करता है

GISInput_People.aspx.cs

AddNewPerson()
{
    // Add person to table
    ....

    // Update Person List
    PeopleListView.DataBind();
    ...
}

सी # नेट में इस तरह के किसी मुद्दे को हल करने का सबसे अच्छा तरीका क्या होगा?

0
ro fr bn

6 उत्तर

अपने मास्टर पेज को मानते हुए माईमास्टर नाम दिया गया था:

(Master as MyMaster).PeopleListView.DataBind();

Edit: since PeopleListView will be declared protected by default, you will either need to change this to public, or create a public property wrapper so that you can access it from your page.

0
जोड़ा

नियंत्रण को मानते हुए मास्टर पेज पर "PeopleListView" कहा जाता है

ListView peopleListView = (ListView)this.Master.FindControl("PeopleListView");
peopleListView.DataSource = [whatever];
peopleListView.DataBind();

लेकिन @ पाल्मेसी अधिक सही है, खासकर यदि आपके पृष्ठ में एक से अधिक मास्टर पेज की संभावना हो सकती है। उन्हें कम करें और एक घटना का उपयोग करें।

0
जोड़ा

मेरा मानना ​​है कि आप इसका उपयोग करके कर सकते हैं ऐसा कर सकते हैं। मस्टर.फिंडकंट्रोल या कुछ समान है, लेकिन आपको शायद नहीं करना चाहिए - इसके लिए सामग्री पृष्ठ को मास्टर पेज की संरचना के बारे में बहुत कुछ पता होना चाहिए।

मैं एक अन्य विधि का सुझाव दूंगा, जैसे सामग्री क्षेत्र में एक घटना को फायर करना जो मास्टर सुन सकता है और निकालकर फिर से बांध सकता है।

0
जोड़ा

आप इस कोड के साथ इस तक पहुंच सकते हैं। मस्टर.फिंडकंट्रोल (कंट्रोलआईडी) जो आपकी इच्छानुसार नियंत्रण करता है। यह नियंत्रण का संदर्भ देता है, ताकि परिवर्तन प्रभावी हो। एक घटना को फायर करने के बारे में हर स्थिति संभव नहीं हो सकता है।

0
जोड़ा

एक याद रखने के लिए निम्नलिखित एएसपी.NET निर्देश है।

<%@ MasterType attribute="value" [attribute="value"...] %>

एमएसडीएन संदर्भ

यह संदर्भित करते समय यह आपकी मदद करेगा। मास्टर पेज के लिए दृढ़ता से टाइप किए गए संदर्भ बनाकर मस्टर। फिर आप CAST की आवश्यकता के बिना अपने ListView का संदर्भ दे सकते हैं।

0
जोड़ा

विकल्प 1: आप अपने मास्टर पेज नियंत्रण की सार्वजनिक संपत्ति बना सकते हैं

public TextBox PropMasterTextBox1
{
    get { return txtMasterBox1; }
    set { txtMasterBox1 = value; }
}

सामग्री पेज पर इसे एक्सेस करें

Master.PropMasterTextBox1.Text="SomeString";

विकल्प 2: मास्टर पेज पर:

public string SetMasterTextBox1Text
{  
    get { return txtMasterBox1.Text; }
    set { txtMasterBox1.Text = value; }
}

सामग्री पृष्ठ पर:

Master.SetMasterTextBox1Text="someText";

विकल्प 3: आप कुछ सार्वजनिक विधि बना सकते हैं जो आपके लिए काम करता है


ये दृष्टिकोण इतना उपयोगी नहीं है लेकिन अगर आप कुछ सीमित और पूर्वनिर्धारित नियंत्रण का उपयोग करना चाहते हैं तो यह मदद करता है

0
जोड़ा
धन्यवाद, यह काम करता है। हालांकि, आपको इसे कास्ट करने की आवश्यकता है: ((myMasterPage) मास्टर) .SetMasterTextBox1Text = "someText";
जोड़ा लेखक Serguei Fedorov, स्रोत
Serguei के अतिरिक्त परिवर्तन के बिना, यह विधि मैंने उपयोग की है। बिल्कुल वही काम करता है जो मुझे चाहिए था। शायद जवाब के रूप में चिह्नित किया जाना चाहिए था। +1
जोड़ा लेखक James, स्रोत
यह आपके कार्यान्वयन पर निर्भर करता है ... एकल मास्टर पेज के लिए ऐसा करने की आवश्यकता नहीं है। और आपका वास्तविक कार्यान्वयन तब तक जटिल होगा जब इस तरह के मूल उदाहरण (जैसे प्रिंट "हैलो वर्ल्ड!")
जोड़ा लेखक BrainCoder, स्रोत