簡體   English   中英

更新面板內的異步文件上傳和觸發回發的下拉菜單不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM