2009-04-27 10 views
5

मेरे पास एक तरीका है जहां उपयोगकर्ता एक आलेख संख्या खोज सकता है और यदि यह डेटाबेस में उपलब्ध है तो articlenumber बाध्यकारी सूची से बंधे हैं। अब मैं उपयोगकर्ता को यह जानना चाहता हूं कि लेख डेटाबेस में उपलब्ध नहीं है या नहीं। मैं इसे सही तरीके से कैसे करूं?(एमवीपी पैटर्न) प्रस्तुतकर्ता से देखने के लिए त्रुटि संदेश कैसे अग्रेषित करें?

बस संदेश त्रुटि पास करें मेरी इंटरफ़ेस विधि में संदेश?

प्रस्तुतकर्ता:

string errorMessage; 
_view.ErrorMessage(errorMessage); 

दृश्य:

public void ErrorMessage(string errorMessage) 
{ 
     MessageBox.Show(errorMessage); 
} 

आप इसे उसी तरह करते हैं?

उत्तर

0

यही वह है जो मैं करता हूं।

एक और तरीका जिसे मैंने पढ़ा है, यह जानने के लिए मॉडल के लिए होगा कि त्रुटि कैसे दिखाना है (शायद एक त्रुटि संदेशदाता द्वारा) ताकि त्रुटि मूल प्रस्तुतकर्ता से अलग हो।

मुझे वास्तव में इसका उपयोग नहीं मिला है, मेरे लिए, यह हमेशा प्रस्तुतकर्ता में समाप्त होता है और दोनों इंटरफेस को लागू करने को देखता है।

1

त्रुटि संदेशों के मामले में मैं कुछ आधार कार्यक्षमता कहूंगा। इस तरह आप नीचे बाईं ओर स्थित स्थिति विंडो को अपडेट करने के लिए गीलेर चुन सकते हैं और/या एक मोडल संदेश बॉक्स प्रदर्शित कर सकते हैं।

प्रस्तोता में:

_windowManager.NoItemFound(errorMessage) 

विंडो प्रबंधक में:

_statusBox.Text = errorMessage; MessageBox.Show(errorMessage); 
3

हम बुलबुला एक घटना। तब

PresenterEventArgs pe = new PresenterEventArgs("Error message", Status.Error); 
this.Message(this, pe); 

ध्यान में रखते हुए: तो जैसे

public event PresenterEventHandler Message; 

और फिर बढ़ा यह: प्रस्तोता में आप उस घटना रजिस्टर

protected override void OnInit(EventArgs e) 
{ 
    this.presenter = new MyPresenter(this, MyBusinessService.Instance); 
    this.presenter.Message += new PresenterEventHandler(presenter_Message); 
} 

void presenter_Message(object sender, PresenterEventArgs pe) 
{ 
    // display error message 
} 

आप के लिए वापस स्थितियों के विभिन्न प्रकार के पारित कर सकते हैं इस तरह से दृश्य, न केवल त्रुटि संदेश। हमारे पास सफलता, त्रुटि, लॉक, चेतावनी, सहायता है।

+0

हाल ही में मैंने ऐसा कुछ किया। क्लाइंट से फीडबैक के लिए त्रुटि और चेतावनियों के लिए ईवेंट (इन्हें CancelEventArgs का उपयोग किया गया था)। – Kevin

1

तो अपने एमवीपी - निष्क्रिय देखें, तो इंटरफ़ेस देखें एक संपत्ति है कि पढ़ सकता है होना चाहिए:

public interface IViewArticleList { 
    // more stuff here... 
    bool ErrorMessageVisible { set; } 
    string ErrorMessage { set; } 
    // more stuff here... 
    int ArticleNumber { get; } 
} 

public interface IPresenter { 
    public void Update(); 
} 

public class ArticleListPresenter : IPresenter { 
    IViewArticleList _view; 

    public ArticleListPresenter(IViewArticleList view) { 
     this._view = view; 
     // you could update the view here or with an update method, 
     // completely up to you. 
    } 

    // Assuming you are using a fine grained presenter 
    public void HandleArticleNumberSearch() { 
     bool articleNotFound; 
     // whatever, whatever...  
     if (articleNotFound) { 
      this._view.ErrorMessageVisible = true; 
      this._view.ErrorMessage = string.Format("The article #{0} was not found.", number); 
     } 
    } 
} 

public class ArticleList : Page, IArticleListView { 
    ArticleListPresenter _presenter; 

    public bool ErrorMessageVisible { 
     set { this.lblErrorMessage.Visible = value; } 
    } 

    public bool ErrorMessage { 
     set { this.lblErrorMessage.Text = value; } 
    } 

    public int ArticleNumber { 
     // You have to do some sort of validation here, but I'll keep it simple 
     get { return Integer.Parse(this.txtArticleNumber.Text); } 
    } 

    protected override void OnInit(EventArgs e) { 
     this._presenter = new ArticleListPresenter(this); 
    } 

    protected void Page_Load(object sender, EventArgs e) { 
     // this implementation keeps the state in the View, and updates it 
     // in the presenter: Passive View 
     if(!this.IsPostBack) { 
      this._presenter.Update(); 
     } 
    } 

    protected void OnSearchArticleButtonClick(object sender, EventArgs e) { 
     this._presenter.HandleArticleNumberSearch(); 
    } 
} 
1

हम नहीं पहिया फिर से आविष्कार करना चाहिए ....

आप बस फेंक चाहिए आपके मॉडल में एक अपवाद।

फिर, दृश्य एक प्रयास पकड़ ब्लॉक का उपयोग कर अपवाद पकड़ लेंगे।

"पकड़ो" में, अपना संदेश बॉक्स दिखाएं।

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