2011-09-21 66 views
4

如何從頁面背後的相同代碼的其他方法調用以下方法?我不知道如何處理(object sender, ServerValidateEventArgs args)位。我致電CustomValidatorDelLN_ServerValidate();我在括號內放什麼?從另一個方法調用EventHandler

+0

調用事件來自其他方法的處理者很奇怪......你想做什麼? –

+0

@Paolo Tedesco我有一套自定義驗證器,它被稱爲onSubmit。然而,表單具有將地址細節從一個部分複製到另一個部分的手段,並且爲了完整起見,在此期間也可以理想地調用自定義驗證器。我可以將所有的驗證複製到複製事件中,但它複製的代碼不是一件好事!我對.net很陌生,所以最好採取行動。 – ComfortablyNumb

回答

1

這樣的事情可以工作...

protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args) 
    { 

     args.IsValid = isValid(); 
    } 


protected bool isValid() 
{ 

    bool is_valid = txtDeliveryLastName.Text != ""; 
     txtDeliveryLastName.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink; 
    return is_valid; 
} 
6

既然你不能直接引用sender,而你沒有正確使用ServerValidateEventArgs,您可以通過快捷事情有點:

var args = new ServerValidateEventArgs(String.Empty, false); 
CustomValidatorDelLN_ServerValidate(null, args); 

我不會做,雖然。我會建議重構。從其他代碼調用事件處理程序確實沒有意義。您可以輕鬆地提取驗證邏輯並將其置於單獨的方法中。然後,您可以使用新的方法從代碼中的兩個點:

// You can call this method from both places 
protected bool ValidateLastName() 
{ 
    bool isValid = !String.IsNullOrWhiteSpace(txtDeliveryLastName.Text); 
    txtDeliveryLastName.BackColor = isValid ? Color.White : Color.LightPink; 
    return isValid; 
} 

// This would be the modified Event Handler 
protected void CustomValidatorDelLN_ServerValidate(object sender, 
    ServerValidateEventArgs args) 
{ 
    args.IsValid = ValidateLastName(); 
} 
+0

這是一個該死的好主意。要去一試! – ComfortablyNumb

3

。提取驗證邏輯的另一種方法

public bool CheckValidity() 
{ 
     bool is_valid = txtDeliveryLastName.Text != ""; 
     txtDeliveryLastName.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink; 
     return is_valid; 
} 

並使用它

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

現在叫CheckValidity()從任何地方

0

因爲您的代碼不實際使用sender參數,你可以簡單地傳遞一個空。至於ServerValidateEventArgs,你可以將它更新一下,沒有魔法。

CustomValidatorDelLN_ServerValidate(null, new ServerValidateEventArgs(String.Empty, false)); 
1

嘗試打破了另一種方法:

private bool ValidateDeliveryLastName() 
    { 
     bool is_valid = txtDeliveryLastName.Text != ""; 
     txtDeliveryLastName.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink; 
     return is_valid; 
    } 

然後使用電話

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

,同樣在通過另一種方法,無論這可能是。

1

爲(對象發件人,ServerValidateEventArgs參數)位把這個:(這一點,新的EventArgs())