我想弄清楚我的架構是否有問題,或者我只是需要快速修復。使用Request.Files並從POST更改爲GET而無需重新加載頁面?
我有我的網頁上執行以下操作:
<div ID="UploadDashboardDecorationZone">
<fieldset id="UploadDashboard">
<legend>Upload Dashboard</legend>
<telerik:RadUpload ID="UploadDashboardSelector" Runat="server" Width="235px" AllowedFileExtensions=".xml" MaxFileInputsCount="1" ControlObjectsVisibility="None" />
</fieldset>
<div class="BottomButton">
<telerik:RadButton ID="SubmitUploadDashboardButton" Runat="Server" Text="Upload" OnClientClicked="CloseUploadDashboard" />
</div>
</div>
用戶選擇他們希望上傳文件,然後他們按SubmitUploadDashboardButton。
然後我有以下服務器端代碼:
protected void Page_Init(object sender, EventArgs e)
{
if (Request.Files.Count > 0) HandleUploadedFile();
}
這一切的偉大工程。上傳的文件被回覆,我看到我的網頁上的變化。唯一的問題是我已經將我的頁面的請求HTTP方法作爲POST而不是GET。這意味着如果用戶刷新頁面,會發生不好的事情。
以前,我曾用下面的代碼片段來解決這個問題:
Page.Response.Redirect(Page.Request.Url.ToString(), true);
不幸的是,這並沒有爲我工作了。我不希望重新加載頁面時發生閃爍(除了重新加載時出現的一些代碼問題)。
我在這裏有什麼其他的選擇?如果我使用UpdatePanel換行UploadDashboardDecorationZone
,那麼Request.Files會變爲0.
是否有快速代碼修復,這是常見的?或者我在理解文件上傳過程的工作原理時會錯過更深層次的東西?
謝謝。
使用DevExpress,我曾經閱讀過他們提供的一種上傳方法,該方法將POST發送到隱藏的IFRAME,因此在刷新主頁面方面是「透明的」。也許你可以用這種方式配置你的Telerik控制器? –
我將不得不閱讀一下這個方法。感謝您的建議! :) –
在最近的一個項目中,我成功地使用了HTML 5 File API,它通過XmlHttpRequest對象(aka AJAX)上傳文件,該對象也沒有完整的POST頁面)。不過,需要現代瀏覽器。 –