asp.net - 单击按钮时获取 asyncfileupload 控件文件名

标签 asp.net ajax ajaxcontroltoolkit

我在我的 asp.net 页面上使用 ajaxfileupload 控件。上传图像后,我调用 uploadcomplete 方法将图像保存在磁盘上并使用以下 JavaScript 在图像控件中显示:

  string fileName = Guid.NewGuid() + Path.GetExtension(PhotoAFU.FileName.Trim()); // encrypt filename 

                    string filePath = Path.Combine(storagePath, fileName);
                    string fileVirtPath = GetImageUrl(fileName); 

       int rnd = new Random((int)DateTime.Now.Ticks).Next(1, 1000);
                    ScriptManager.RegisterClientScriptBlock(PhotoAFU, PhotoAFU.GetType(), "img",
                        String.Format(
                            @"top.document.getElementById('{0}').src='{1}?x={2}';
                            top.document.getElementById('{3}').value = '{4}'",
                            EditPhotoImage.ClientID,
                            fileVirtPath,
                            rnd,
                            UploadedImageFileNameHF.ClientID,
                            fileName),
                        true
                );

现在我单击保存按钮并尝试使用以下代码获取图像:

Path.GetFileName(EditPhotoImage.ImageUrl) // shows old image


or


Path.GetFileName(PhotoAFU.FileName) // it shows actual image name not encrypted one

但它们都显示旧图像而不是当前图像或实际图像名称而不是加密名称。如何在此方法中从上述方法获取文件名?我尝试使用 viewstate 但它无法正常工作。

最佳答案

您可以在 UploadComplete 事件处理程序中的 AjaxFileUploadEventArgs 参数的 PostedUrl 属性中将数据作为 JSON 对象从服务器传递到客户端,并在以下位置获取此数据客户端的 OnClientUploadComplete 处理程序:

protected void AjaxFileUpload1_OnUploadComplete(object sender, AjaxFileUploadEventArgs e)
{
    string fileName = Guid.NewGuid().ToString();
    string fileVirtPath = "foobar";

    e.PostedUrl = string.Format("{{ fileName: '{0}', imageSrc: '{1}?x={2}' }}", 
        fileName, fileVirtPath, new Random((int)DateTime.Now.Ticks).Next(1, 1000));
}

 function AjaxFileUpload1_OnClientUploadComplete(sender, args) {
      var fileInfo = Sys.Serialization.JavaScriptSerializer.deserialize(args.get_postedUrl());
      $get("<%= EditPhotoImage.ClientID %>").src = fileInfo.imageSrc;
      $get("<%= UploadedImageFileNameHF.ClientID %>").value = fileInfo.fileName;
 }

关于asp.net - 单击按钮时获取 asyncfileupload 控件文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18743107/

相关文章:

asp.net - UpdatePanel 完整回发

javascript - 从 AJAX 调用成功返回 '0' 或 0?

.net - 如何在 ASP.NET AJAX Control Toolkit 中的 AsyncFileUpload 的文件浏览菜单中限制文件类型

c# - 在 Visual Studio 2019 中找不到 .NET 5.0 控制台应用程序项目模板

javascript - knockout -ES5 不工作

asp.net - 使用 MVC5 ASP.NET 和rackspace 发送电子邮件

asp.net-ajax - 如何知道 ASP.NET AJAX 中回调的大小?

asp.net - 在 VS Code 和 VS 2015 之间切换

jquery - Django Ajax 。 dajax 仍然可以吗?还是最好立即转向 jQuery(2012 年复兴)?

asp.net - 异步文件上传控件