更新面板内的异步文件上载和触发回发的下拉列表无法正常工作

问题描述 投票:2回答:2
 <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上隐藏字段会丢失它的值。如果A回发后我怎么能将值存储在隐藏字段中(我不想使用会话)

      <asp:DropDownList ID="ddl_Res" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged">
 </ContentTemplate>
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="ddl_Res" EventName="SelectedIndexChanged" />         
  </Triggers>
c# jquery asp.net ajax ajaxcontroltoolkit
2个回答
0
投票

AsyncFileUpload本身就是一个异步控件。使用该控件上载文件时的含义,将其上载到服务器。

然后,如果单击“保存”再次上载,它将再次上载该文件,除非当fileupload控件到达服务器时它将自行清除。

不幸的是,您必须在第一次点击服务器时存储该文件。您可以使用会话或将其存储到文件系统,具有已知的ID,例如1234.tmp,然后在设置UpdatePanel时抓住它。

另外要确保清除AsyncFileUpload,这就是你要做的。在fileupload完成

 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,因此请确保为您的页面获得正确的控件名称。


0
投票

我几周前遇到同样的问题,aspx非常复杂,我不得不将filepath放入session。我建议你尝试这样做。我记得我在谷歌或这里堆栈上找不到任何其他解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.