![](/img/trans.png)
[英]FileUpload Control not working 'Outside' AJAX Update Panel but works 'Inside' with Postback trigger?
[英]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.