更新面板内的异步文件上传和触发回发的下拉菜单不起作用
本文关键字:不起作用 下拉菜单 异步 文件 更新 | 更新日期: 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上找不到其他的解决方案