gpt4 book ai didi

c# - 更新面板内的异步文件上传和触发回发的下拉列表不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:38 25 4
gpt4 key购买 nike

 <asp:AsyncFileUpload ID="AFU_Video" OnUploadedComplete="btnVidUpload_Click" 
runat="server" UploaderStyle="Traditional" ThrobberID="aajaxLoader" />

我在 更新面板 中有一个 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 上,隐藏字段失去了它的值。即使在回发后我如何将值存储在隐藏字段中(我不想使用 session )

      <asp:DropDownList ID="ddl_Res" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged">
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddl_Res" EventName="SelectedIndexChanged" />
</Triggers>

最佳答案

AsyncFileUpload 本身就是一个异步控件。这意味着当您使用该控件上传文件时,它会上传到服务器。

然后如果您点击保存再次上传,它将再次上传该文件,除非当文件上传控件到达服务器时它会自行清除。

不幸的是,当文件第一次访问服务器时,您必须存储该文件。您可以使用 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

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

关于c# - 更新面板内的异步文件上传和触发回发的下拉列表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8563579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com