2012-11-02 43 views
2

我創建了一個用於提取數據的界面,有幾個簡單的步驟。執行過程時刷新頁面

用戶從下拉框中選擇他們想要的數據,他們點擊「檢查可用」按鈕,如果有可用的記錄,顯示「發送請求」按鈕。

點擊發送請求按鈕後,SQL表被髮送到excel文件,該文件稍微用vba處理,然後用戶通過C#發送郵件並鏈接到該excel文件。

我面臨的問題是,用戶在一兩秒後不耐煩,並開始反覆搗碎「發送請求」按鈕。這種急躁使應用程序崩潰。

我怎樣才能使頁面的行爲,以便點擊「發送請求」後,頁面刷新,但過程仍然通過服務器進行,​​電子郵件仍然從C#發送。

public void SendRequest_Click(object sender, EventArgs e) 
{  
    //Insert amazing line of code that refreshes the web form but does everything beyond this line 

    SendRequest.Visible = false; 
    //Creating a new class 
    QueryMule mule = new QueryMule(); 
    Label11.Visible = true; 
    string myfilename = Label3.Text; 
    string splitusernum = Label4.Text; 
    string dtablenum = Label4.Text; 
    string exportnum = Label4.Text; 
    //Export all export tables to mercuryexport excel file 
    mule.SQLExport(18, splitusernum, exportnum); 
    //Creating a new excel application to open the mercury template and run its macro 
    ExcelApp.Application appExl; 
    ExcelApp.Workbook workbook; 
    ExcelApp.Worksheet newSheet; 
    ExcelApp.Range Range; 
    appExl = new ExcelApp.Application(); 

    RegionName.SelectedItem.Value + timestampeddone + ".xlsm"; 

    workbook = appExl.Workbooks.Open(@"filepath", Missing.Value, 
     Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
     Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
     Missing.Value, Missing.Value, Missing.Value); 

    appExl.Visible = true; 
    appExl.DisplayAlerts = true; 

    System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); 
    message.To.Add '''REMOVED EMAIL ADDRESS 
    message.Subject = "Delivery System"; 
    message.From '''REMOVED EMAIL ADDRESS 
    message.Body = "filepath" + myfilename; 
    System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("mailhost"); 
    smtp.Send(message); 

    Label4.Text = "Email Sent"; 

    mule.DropTable(dtablenum); 
    mule.DropTable1(dtablenum); 
    mule.DropTable2(dtablenum); 
    mule.DropExportTable(dtablenum); 
} 
+1

或許考慮更新面板或者至少是禁用「發送請求「按鈕之前回發 –

回答

1

你需要分離一個後臺工作線程來創建excel文件。然後,該請求會立即以友好的消息作出響應,表明他們將在電子郵件準備就緒時通過電子郵件發送郵件。

+1

警告:線程和IIS不能愉快地一起工作,最好是啓動一個全新的進程 – Randolpho

+0

準確地說,我有一個標籤可以顯示該消息,但是,那麼只有整個程序完成後纔會顯示消息,所以我需要寫一些會顯示「您的請求已被提交,請檢查您的結果包的電子郵件」的東西,但我該如何去調用所有程序n後臺工作線程? – sgl

+1

我發現了一個整潔的解決方案,我只是禁用了java中的按鈕... sgl

0

你的邏輯包括兩個重量級操作:生成excel文件和發送郵件。您可以使用Paul建議的後臺線程來使服務器處理更輕。

否則,請阻止頁面,直到您從服務器獲得響應,以便用戶在頁面準備就緒之前無法與頁面進行交互。爲此,您可以使用jQuery UI塊插件(http://jquery.malsup.com/block/#).

這個插件的使用例子顯示在一個ASP.NET論壇帖子:http://forums.asp.net/p/1656559/4317158.aspx/1?Re+show+progress+in+dialog