2014-02-21 61 views
5

我使用ASP.NET發送電子郵件異步。 我注意到我必須在視圖中設置「Async = true」。如何爲所有頁面設置Async =「true」?

母版頁不支持此屬性。我如何設置所有頁面的異步?

+0

請注意,這是很難得火,忘記在ASP.NET後臺工作的權利。你可能不是一條好路。 – usr

+2

請參閱http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/。工作進程可能隨時死亡。那麼你的背景工作就失去了。 – usr

+0

[這是另一篇不錯的博客文章](http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html)解釋了一些正確的方法來做後臺工作的選項ASP.NET –

回答

2

您可以像這樣在主頁面中設置它。找到解決方案here

public abstract class MyBasePage : System.Web.UI.Page 
{ 
    public MyBasePage() 
    { 
     this.AsyncMode = true; 
    } 
} 

然後在aspx.cs文件的繼承改變這樣的事情:

public partial class WebForm1 : MyBasePage 

它可以破壞系統,當你在其他任何設置AsyncMode屬性,則構造函數。

+0

這是一個很好的理想。很奇怪,這個屬性並沒有出現在視覺工作室的自動完成中。雖然它編譯。 – Seva

+1

不錯吧!他們將「Browsable」設置爲「false」,因爲他們不希望你找到它。當你在構造函數中設置其他任何東西時,它可能會破壞系統。 –

1

打開查找對話框,然後輸入:

Find: @Page 
Replace with: @Page Async="True" 

單擊全部替換按鈕:-D據我瞭解,你不能只是做自動的一切。它需要在每個頁面上定義。

+0

這是真的。 AsyncMode = true實際上並不允許異步使用(與RegisterAsyncTask) – Zerkz

0

與其試圖在ASP.NET的頁面代碼中發送電子郵件,爲什麼不使用AJAX?製作一個像登錄表格一樣響應POST的ASPX文件,並在發佈時發送一封電子郵件。 AJAX是異步的,您可以使用它在活動網頁中顯示進度。 AJAX的介紹可以在這裏找到:http://www.w3schools.com/ajax/default.asp

個人而言,我使用jQuery來做我的AJAX工作。你可能想看看:http://jquery.com/

最後但並非最不重要的,如果你不想「滾你自己的」代碼要做到這一點,郵件投遞像狒狒檢查出一個Web API:http://mandrill.com/

1

包含tpl引用。 然後做 Task.Run(()=> Sendmailmethod()); 這是快速n整齊的火n忘記模式

+2

你真的不應該在ASP.NET應用程序中這樣做。您的AppDomain可能在您的Sendmailmethod()完成之前關閉。如果您使用4.5.2或更高版本,請使用'HostingEnvironment。QueueBackgroundWorkItem(()=> Sendmailmethod())',所以IIS會知道你有一個後臺任務正在運行。閱讀[本博客文章](http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html)瞭解更多有關QBWI和其他「消防和忘記」選項的信息.NET如果你不在4.5.2上。 –

+0

用戶rott scott,但appdomain關閉是一個遠程事件,並且當Task.run在正常關機時產生時IIS仍然知道.Trust我試過n測試過 –

相關問題