2011-09-05 63 views
0

我正在使用c#在ASP.NET 4中使用Ajax文件上傳控件。同一頁面也有更新面板,但上傳控件不在更新面板內。上傳控件位於更新面板之外。使用Ajax更新面板的頁面無法工作文件上傳

更新面板上有一個驗證碼圖片,提交按鈕即described here too。裏面的提交按鈕包含用於保存上傳控制文件的代碼。

問題是,當用戶使用上傳控件瀏覽要上傳的文件,然後輸入錯誤的captcha值並提交時,則會向用戶提供一個新的驗證碼圖像以供輸入。現在上傳控件仍然在文件的上傳欄中顯示路徑,但在編程方面它不檢測文件。

提交按鈕代碼:

if (AsyncFileUpload.HasFile) 
{ 
    // upload logic and other stuff 
} 
else 
{ 
    // lblShow.Text = "There is no file to be uploaded"; 
} 

例如上面的代碼執行else部分說「沒有要上傳的文件」。頁面仍然沒有完全刷新,文件上傳控件顯示文件的路徑。請幫助我解決這個問題。

回答

0

如果你的代碼:

if (AsyncFileUpload.HasFile) 
{ 
    // upload logic and other stuff 
} 
else 
{ 
    // lblShow.Text = "There is no file to be uploaded"; 
} 

是在Page_Load事件時,它仍然會執行在部分回發的情況下,例如刷新UpdatePanel。如果沒有從瀏覽器執行完整的表單提交(您提到您的文件上傳超出UpdatePanel),那麼該頁面將無法檢測到文件上傳。

我對此感到困惑的是,爲什麼當它在UpdatePanel之外時稱它爲AsyncFileUpload

編輯:

根據您的回答,我不認爲你的驗證碼的實現是可行的與異步文件上傳,你現在擁有它。

UpdatePanel執行一個異步POST來評估驗證碼結果,但您不會POST文件內容,因爲它不在UpdatePanel內。然後,您的服務器端代碼評估驗證碼結果,並將異步響應中的html或重定向返回給瀏覽器......您需要最終提交表單以獲取文件。

除非您準備編寫代碼,以便在異步響應中將一些javascript發送回您的頁面以觸發完整表單提交,並且在表單提交中再次重新評估CAPTCHA,那麼您可能更適合採用在我看來,UpdatePanel

+0

代碼不在頁面加載事件中。它在提交按鈕的代碼中。驗證碼圖像,lblShow和提交按鈕位於更新面板內。 AsyncFileUpload是我從Ajax Toolbox使用的Ajax File Uploader控件。 – Jayesh

+0

我想得到一個功能,例如用戶只需要上傳文件一次,因爲它是一個很重的文件,然後如果他輸入錯誤的captcha值,他可以異步糾正它。這樣用戶在下一次輸入catcha值時不必再次上傳文件。如果用戶輸入錯誤的驗證碼,並且頁面刷新另一個驗證碼嘗試,那麼用戶將再次從控件上傳整個文件。沒有解決方法來異步執行此操作嗎? – Jayesh

+0

確實有辦法異步執行它。你可以看看使用AJAX文件上傳組件。 (我相信很多有效地使用iframe .HTML5給你更多的選擇,但沒有廣泛支持) –

0

如果您使用帶文件上傳控件的Ajax更新面板,則必須將回發觸發器添加到更新面板觸發器中。像:

<Triggers> 
     <asp:PostBackTrigger ControlID="btnContactSubmit"/>               
</Triggers> 
+0

即使在添加或減去回發觸發器時,部分回傳也很正常。這裏存在的問題是我正在丟失FileUpload的文件,這是我在提交按鈕代碼中保存的.... – Jayesh

相關問題