ajax文件上传后更新文本框

时间:2012-07-12 05:26:19

标签: asp.net updatepanel

我在我的项目中使用this Ajax文件上传并且工作正常,我唯一的问题是如何保存我刚刚上传的照片路径? 基本上我尝试在成功上传后将路径复制到TextBox控件并使用updatepanel包围该文本框并在调用Ajax的SaveAs方法后手动更新该面板,但它似乎不起作用。

这是uploadedComplete事件的代码:

protected void AsyncFileUpload1_UploadedComplete (object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
    {
        System.Threading.Thread.Sleep(3000);
        if (AsyncFileUpload1.HasFile)
        {
            var relativeFolder = DateTime.Now.Year.ToString(CultureInfo.InvariantCulture) + Path.DirectorySeparatorChar + DateTime.Now.Month +
                             Path.DirectorySeparatorChar;
            relativeFolder = relativeFolder.Replace('\\', '/');
            var folder = Utils.RelativeWebRoot + "PostPhotos/" + relativeFolder;
            var fileName = Path.GetFileName(e.FileName);

            AsyncFileUpload1.SaveAs(Server.MapPath(folder + fileName));

            txtPostPhoto.Text = folder + fileName;
            PostImage.ImageUrl = txtPostPhoto.Text;

            PostPhotoUpdatePanel.Update();
        }
    }

txtPostPhoto是我的文本框。

PostImage是我尝试显示图像预览的地方。

还有另一种方法吗?

3 个答案:

答案 0 :(得分:1)

请仔细查看link中的示例。

使用AJAX控件的以下属性:

OnClientUploadComplete="uploadComplete"

当文件成功上传时,它是在服务器端触发的javascript函数。您可以在此功能中设置文本框值。

示例:

function uploadComplete(sender, args) {
    var txt= document.getElementById("ctl00_SampleContent_clientSide");//Your textbox id
    txt.value=args.get_fileName();
} 

答案 1 :(得分:0)

您应该将路径保存在数据库中,而不是按名称保存,而应该通过创建GUID并使用GUID作为名称进行保存。

为什么?

  1. 考虑一个场景,其中两个图像具有相同的名称,一个将明显被覆盖, 在这些情况下使用GUID会有所帮助。
  2. 如果您不再需要,可以在数据库中存储,以帮助您识别或删除图像。

答案 2 :(得分:0)

尝试在ViewState中保存photopath

protected void AsyncFileUpload1_UploadedComplete (object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
     ViewState["path"] = "your path"
     Page.ClientScript.RegisterHiddenField("vpath", ViewState("path"))
}

在客户端放置一个脚本标记

<script type="text/javascript" >
    var vCode = document.getElementById("vpath");
</script>