2011-12-19 76 views
1
<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> 

回答

0

的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,所以请确保你的页面有正确的控制名称。

+0

我可能没有必要清除我所做的所有工作,但比对不起更安全,特别是因为我不需要任何这些值。 – 2011-12-19 15:44:57

0

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

+0

在选择一个文件并上传到服务器之后,如果用户决定不点击提交,那么会话是用文件名创建的,下一次即使他没有选择文件,会话也会保存一个文件名并且会添加当用户点击提交 – Mark 2011-12-19 17:16:11

+0

是的你是对的,但这只是一个解决方案是什么来到我的头上,另一个是使用正常的文件上传器在分离的aspx。但是我不得不重新设计所有部分(这在我的情况下是可能的),我后来做了。 – Mariusz 2011-12-19 17:37:52