2014-06-15 45 views
0

我在演示者中具有以下方法,用於驗證用戶界面上的用戶輸入。基本上要捕獲文本框的文本屬性的值,它使用由表單上的事件觸發傳入的sender對象。演示者如何在驗證文本框中訪問值

主講

_View.ValidateInPut += new EventHandler(_View_ValidateInPut); 

private void _View_ValidateInPut(object sender, EventArgs e) 
{ 
    var controller = (TextBox)sender; 
    var text = controller.Text; 

    If (text is InValid) 
    MessageBox.Show ("The value in the Text box is invalid"); 

} 

VIEW

private void txtACNo_Validating(object sender, CancelEventArgs e) 
{ 
    ValidateInPut(sender, e); // Firing the event 
} 

這是否會導致意想不到的錯誤?

如果是這樣,請讓我知道更好的方法來做到這一點?

EDIT(爲了清楚起見):

此代碼編譯和沒有錯誤運行。基本上我想知道的是,這是一個標準的方式來做到這一點?你以這種方式做過事情嗎?如果它不好,讓我知道一個更好的方法來做同樣的事情!

+0

有代碼錯誤。我編輯它。 – CAD

+0

_這會導致意外的錯誤嗎?_請運行代碼並查看!當這一步完成後,發佈一個真正的問題 – chouaib

+0

@ chouaib,代碼編譯沒有錯誤!我的問題是,在某些不可預見的情況下,在處理不同事件時,這種方法會不會有問題;) – CAD

回答

2

通過這種方式,您可以將Presenter與Web控件耦合。如果您決定使用另一個接受輸入的控件更改TextBox,則需要更改查看Presenter中的代碼。 演示者不應該知道您在查看中使用的控件類型。

以下是您可以將Presenter查看去耦。

您需要定義一個具有您需要獲取/設置的屬性的接口。

public interface IView 
{ 
    string Input { get; } 
} 

你堅實實現IView接口,可以在.aspx頁面中,用戶名爲.ascx控制等等都需要自己的一個實例傳遞給演示。 可以說你有一個TextBox在你的標記中的某個地方。您返回Input獲取存取器中TextBoxText屬性。

public class AspxPage : Page, IView 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Presenter presenter = new Presenter(this); 
    } 

    public string Input 
    { 
     get 
     { 
      return this.textBox.Text; 
     } 
    } 
} 

現在在演示調用IView接口,在目前的情況下返回

public class Presenter 
{ 
    private IView view; 

    public Presenter(IView view) 
    { 
     this.view = view; 
    } 
    private void _ValidateInput() 
    { 
     string text = this.view.Input; 

     If (text is InValid) 
     MessageBox.Show ("The value in the Text box is invalid"); 

    } 
} 

你獲得做這個是什麼改變了你使用什麼類型的控制的Input財產設計您的查看不會導致對演示者的更改。例如,您可以將相同的演示者類用於Web窗體和獲勝表單項目,而無需擔心使用的控件,因爲接口不是固體實現,而只是意識到接口不是固定的實現。

你可以看一下這裏更詳細的例子: http://www.codeproject.com/Articles/14642/Model-View-Presenter-with-ASP-NET

+0

首先我沒有開發一個Web應用程序。無論如何,這篇文章很有幫助。但我有一個問題。可以說我們有一個Int不是字符串。那麼你將如何驗證它?因爲我們必須解決屬性內部的一些轉換,以便將值作爲Int來公開! – CAD

+0

視圖界面保存文本框的值。如果此值是供演示者決定的有效數字。這意味着您應該分析演示者中文本框的值。 –

+0

好的,如果我在視圖中封裝文本屬性...'公共int ID {獲得{返回convert.ToInt(txtID.text)}'那麼演示者可以做驗證。但是如果用戶在文本框中輸入字符會發生什麼。視圖中會出現異常。那麼,我們是否也必須在視圖中進行驗證才能完成這項工作? – CAD