![](/img/trans.png)
[英]FileUpload Control not working 'Outside' AJAX Update Panel but works 'Inside' with Postback trigger?
[英]Asynchronous file upload inside a update panel and a dropdown to trigger postback not working
<asp:AsyncFileUpload ID="AFU_Video" OnUploadedComplete="btnVidUpload_Click"
runat="server" UploaderStyle="Traditional" ThrobberID="aajaxLoader" />
我在update panel
有一個 Ajax 異步文件上傳,它在選擇文件時異步上傳文件
這是上傳文件的方法
protected void btnVidUpload_Click(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
lbl_VideoLinkName.Visible = true;
if (AFU_Video.HasFile)
{
//create the path to save the file to
string filename = AFU_Video.FileName;
string Fullpath = Path.Combine(@"D:\Media", filename);
AFU_Video.SaveAs(Fullpath);
lbl_VideoLinkName.Text = "You uploaded " + AFU_Video.FileName;
Hidd_VideoLoc.Value = filename;
}
在我將文件的位置存儲在 Hidd_VideoLoc (hidden field)
,在文件上傳下方,我有一個下拉列表,當值更改時會進行回發。 當下拉值更改時,文件上傳會丟失文件,但文件會上傳到服務器中。 我希望文件名在單擊提交按鈕時更新數據庫,但隱藏值也會丟失文件名並且為空。 但是該文件存在於服務器中。 我試圖將文件名值保存在btnVidUpload_Click
隱藏字段中,但它保存了該值,但在 SelectedIndexChanged 上,隱藏字段失去了它的值。 即使在回發后如何將值存儲在隱藏字段中(我不想使用會話)
<asp:DropDownList ID="ddl_Res" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged">
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddl_Res" EventName="SelectedIndexChanged" />
</Triggers>
AsyncFileUpload 本身就是一個異步控件。 這意味着當您使用該控件上傳文件時,它會上傳到服務器。
然后,如果您再次單擊保存上傳,它將再次上傳該文件,除非文件上傳控件到達服務器時它會自行清除。
不幸的是,當它第一次訪問服務器時,您必須存儲該文件。 您可以使用會話或將其存儲到文件系統中,使用已知 ID,例如 1234.tmp,然后在設置 UpdatePanel 時獲取它。
還要確保您在這里清除 AsyncFileUpload 是您要做的。 在文件上傳完成
protected void AsyncFileUpload_OnUploadedComplete(object sender,
AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
((AsyncFileUpload)sender) // You have to save this somewhere, or the information in it
((AsyncFileUpload)sender).ClearAllFilesFromPersistedStore();
((AsyncFileUpload)sender).ClearFileFromPersistedStore();
sender = null;
}
然后在頁面上在控件的上傳完成事件上使用一些javascript
function UploadComplete() {
var btn = document.getElementById('MainContent_btnEnter');
btn.value = "Enter";
btn.disabled = false;
var form1 = document.getElementById('form1');
form1.target = "";
document.getElementById('MainContent_upVideo').innerHTML = 'Uploaded Successfully';
document.getElementById('MainContent_upVideo').value = '';
document.getElementById('MainContent_upVideo_ClientState').value = '';
}
請注意,您需要重置表單目標。 還要注意您需要清除 ClientState 值,您可以在頁面上添加一些完整的文本。 MainContent 只是一個 ContentHolder,因此請確保為您的頁面獲取正確的控件名稱。
幾周前我遇到了同樣的問題, aspx 非常復雜,我不得不將文件filepath
放入session
。 我建議你嘗試這樣做。 我還記得我在谷歌或堆棧上找不到任何其他解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.