2011-09-23 32 views
3

我試圖創建將自定義的驗證傳遞給它的任何TextBox控件的方法。傳遞一個控制的方法

這裏是我到目前爲止有:

自定義驗證

protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args) 
    { 
     CustomValidator ThisValidator = sender as CustomValidator; 
     TextBox MyBox = FindControl(ThisValidator.ControlToValidate) as TextBox; 

     args.IsValid = isValid(MyBox); 
    } 

驗證法

protected bool isValid(System.Web.UI.WebControls.TextBox MyBox) 
    { 
     bool is_valid = MyBox.Text != ""; 
     MyBox.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink; 
     return is_valid; 
    } 

代碼編譯OK,但我得到一個

NullReferenceException被使用未處理R代碼裏面

bool is_valid = MyBox.Text != ""; 

當我運行驗證。

我知道我接近(嗯,我想我),但我要去哪裏錯了?

+2

線 '文本框myBox上=的FindControl(ThisValidator.ControlToValidate)的文本框;' - MyBox爲null –

+1

看看FinControl()它不是遞歸的。我不確定你爲什麼在那裏使用FindControl(),你在頁面上嗎?如果是這樣,你可以把runat =「server」放在那個sucka中並按名稱使用它。 – EJC

+1

對不起,我看到你正在使用自定義驗證器,所以你可以驗證任何TextBox。 – EJC

回答

1

你的問題是FindControl()方法是不是遞歸的,因此MyBox一片空白。你必須,如果你想讓它正常工作,寫一個遞歸FindControl()方法就像一個here

你可能還需要檢查是否MyBox爲空,並返回該方法,如果它是。

+0

感謝您的幫助! – ComfortablyNumb

-4

您正在嘗試驗證空文本框。您無法驗證空字符串。

+2

一個空字符串不會導致'NullReferenceException'。 –

+0

bool is_valid = MyBox.Text!=「」;這不會導致NullReferenceException? 爲什麼不能做 bool is_valid = MyBox.Text!=「null」 像上面的海報 – Botonomous

+0

問題不在於空字符串。它正在訪問空對象的'.Text'屬性。再看另一種方式。空字符串是否爲空引用? (號)或者文本框變量是否可以包含空引用? (是)然後詢問您是否可以訪問空引用的屬性。 –

1

你首先需要檢查對象本身存在的,澆鑄後:

bool is_valid = MyBox != null; 

之後,你可以檢查其text屬性

0

爲完整的代碼爲我做的伎倆:

protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args) 
    { 
     args.IsValid = isValid(txtDeliveryLastName); 
    } 

    protected bool isValid(System.Web.UI.WebControls.TextBox MyBox) 
    { 
     bool is_valid = MyBox.Text != ""; 
     MyBox.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink; 
     return is_valid; 
    } 
相關問題