2014-02-07 41 views
0

我有一個PasswordRecovery控件,它的行爲需要修改。當觸發SendingMail事件時,將調用事件處理程序。在事件處理程序中,我定義了將MailMessage寫入隊列(稍後處理)的行爲。到現在爲止還挺好。問題是該事件繼續,並嘗試使用內置方法LoginUtil.SendPasswordMail。這需要smtp服務器信息,我不想提供(因爲它會違反我們的應用程序的設計)。在.NET PasswordRecovery控制中停止傳播SendingMail事件

這裏的事件處理程序:

protected void vendorWebPasswordRecovery_SendingMail(object sender, MailMessageEventArgs e) 
{ 
    string userName = this.vendorWebPasswordRecovery.UserName; 

    try 
    { 
     MailMessage emailMessage = e.Message; 

     var messageData = new Dictionary<string, string>(); 

     messageData.Add("toEmail", emailMessage.To[0].ToString()); 
     messageData.Add("subject", emailMessage.Subject + " from the queue!"); 
     messageData.Add("body", emailMessage.Body); 

     //Write the message out to the queue 
     SendPasswordResetEmail(messageData, userName); 
    } 
    catch (Exception ex) 
    { 
     LoggingHandler.Write("MailMessageEventArgs did not contain expected data: - " + ex.Message, LogCategoryType.Verbose, TraceEventType.Verbose, 1, ex); 
    }     

    //Compilation error: "MailMessageEventArgs doesn't contain a definition for 'Handled'" 
    e.Handled = true; 
} 

我如何阻止繼續就和調用內置方法的事件?我試圖設置MailMessageEventArgs來處理,但這是一個編譯錯誤。這甚至是正確的方法嗎?

+0

你嘗試e.Cancel代替e.Handled?在這裏示例:http://scottonwriting.net/sowblog/archive/2009/11/10/163371.aspx – gbs

+0

我做了,它的工作完美。如果你想把它放在答案中,我會把它標記爲:] – Zach

回答

1

您應該使用e.Cancel取消該事件並停止發送默認電子郵件。

樣品在這裏:scottonwriting.net/sowblog/archive/2009/11/10/163371.aspx