更新面板内的异步文件上传和触发回发的下拉菜单不起作用

本文关键字:不起作用 下拉菜单 异步 文件 更新 | 更新日期: 2023-09-27 18:18:12

 <asp:AsyncFileUpload ID="AFU_Video" OnUploadedComplete="btnVidUpload_Click" 
             runat="server" UploaderStyle="Traditional" ThrobberID="aajaxLoader" />

我有一个Ajax异步文件上传里面的update panel异步上传文件时,一个文件被选中

这是上传文件的方法

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隐藏字段失去了它的值。我怎么能存储隐藏字段的值,甚至在一个post后(我不想使用会话)

      <asp:DropDownList ID="ddl_Res" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged">
 </ContentTemplate>
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="ddl_Res" EventName="SelectedIndexChanged" />         
  </Triggers>

更新面板内的异步文件上传和触发回发的下拉菜单不起作用

AsyncFileUpload本身就是一个异步控件。这意味着当您使用该控件上传文件时,它被上传到服务器。

然后,如果你点击保存再次上传,它会再次上传该文件,除非当fileupload控件到达服务器时,它会自行清除。

不幸的是,您必须在该文件第一次到达服务器时存储该文件。您可以使用session或将其存储到文件系统中,使用已知的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,例如在控件的upload complete事件上

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。我建议你试着这样做。我还记得我在google或者stack上找不到其他的解决方案