2009-04-27 49 views
5

我有一種方法,用戶可以搜索一個商品編號,如果它在數據庫中可用,則articlenumber將綁定到一個BindingList。現在我想讓用戶知道文章是否在數據庫中不可用。我如何以正確的方式做到這一點?(MVP模式)如何將Presenter的錯誤消息轉發到視圖?

只需將消息errorMessage傳遞給我的接口方法?

主持人:

string errorMessage; 
_view.ErrorMessage(errorMessage); 

查看:

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

你會做同樣的方式?

回答

0

這就是我所做的。

我讀過的另一種方法是讓模型知道如何顯示錯誤(可能由ErrorMessagePresenter),以便錯誤與原始演示者分離。

我還沒有真正發現它的用途,對我來說,它總是以演示者和視圖結束實現這兩個接口。

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 2012-10-03 06:26:40

1

如果MVP - 被動視圖,然後在視圖界面應該有一個可以讀取一個屬性:

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

我們不應該重新發明輪子....

你應該簡單地拋出你的模型中有一個例外。

然後,視圖將使用try catch塊捕獲異常。

在「catch」中,顯示您的消息框。

相關問題