जेडंकरले के पास यह सही है। लेकिन मुझे यह समझाने की अनुमति दें कि एमवीपी का उपयोग करके इसे कैसे रद्द किया जाए ताकि आप डिजाइन समस्या से बचने के लिए काम कर सकें हेइको हैट्ज़फेल्ड बात कर रहा है।
असल में, अपने नियंत्रण और अपने मास्टर पेज दोनों के लिए एमवीपी पैटर्न लागू करें। इसे कैसे करें इसके निर्देशों के लिए here देखें। जिस मास्टर को आप मास्टर इंटरफ़ेस (IMasterView) में कॉल करना चाहते हैं उसे घोषित करें। अगला एक वर्ग बनाएं जो दो घटकों के बीच संबंधों को नियंत्रित करेगा; हम इसे पेज कंट्रोलर क्लास कहेंगे। Global.asax पर निम्न पंक्ति जोड़कर प्रत्येक अनुरोध के लिए अनुरोध स्थिति में इस वर्ग का एक उदाहरण रखें।सीएस:
/* global.asax.cs */
protected void Application_BeginRequest(object sender, EventArgs e)
{
// ...
HttpContext.Current.Items["Controller"] = new PageController();
// ...
}
फिर आप कोड की निम्न पंक्ति के माध्यम से प्रस्तुतकर्ताओं (मास्टर और नियंत्रण) में से प्रत्येक से इस उदाहरण का उपयोग कर सकते हैं:
var controller = HttpContext.Current.Items["Controller"] as PageController;
फिर आप एक घटना या कुछ अन्य तंत्र लागू कर सकते हैं नियंत्रण को इस साझा ऑब्जेक्ट के माध्यम से एक decoupled तरीके से मास्टर पर विधि का आह्वान करने की अनुमति दें। उदाहरण के लिए:
/* PageController.cs */
public event EventHandler SomeEvent;
protected virtual void OnSomeEvent(EventArgs e)
{
Debug.Assert(null != e);
var handler = this.SomeEvent;
if (null != handler)
handler(this, e);
}
public void FireSomeEvent()
{
this.OnSomeEvent(EventArgs.Empty);
}
/* ControlPresenter.cs */
public ControlPresenter(IControlView view)
: base()
{
view.EventFired += (sender, e) =>
{
var controller = HttpContext.Current.Items["Controller"] as PageController;
controller.FireSomeEvent();
};
}
/* MasterPresenter.cs */
public MasterPresenter (IMasterView view)
: base()
{
var controller = HttpContext.Current.Items["Controller"] as PageController;
controller.SomeEvent += (sender, e) => view.MyFunction();
}
यकीन है कि "EventFired" घटना अपने नियंत्रण के इंटरफेस (IControlView) में घोषित कर दिया और नियंत्रण में लागू किया गया है। फिर आपको मास्टर को प्रभावित करने के लिए क्या करना है (इसकी विधि को कॉल करें), इस घटना को आग लगाना है और एमवीपी + पेजकंटोलर बाकी की देखभाल करेगा।
चीयर्स
स्रोत
2009-09-18 15:42:38
मैंने इस दृष्टिकोण का उपयोग किया और यह ठीक काम किया! धन्यवाद –
सहायता की खुशी है! हैप्पी कोडिंग :-) –