<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 :(得分: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,因此请确保为您的页面获得正确的控件名称。
答案 1 :(得分:0)
我几周前遇到同样的问题,aspx非常复杂,我不得不将filepath
放入session
。我建议你尝试这样做。我记得我在谷歌或堆栈上找不到任何其他解决方案。