我在我的项目中使用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是我尝试显示图像预览的地方。
还有另一种方法吗?
答案 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作为名称进行保存。
为什么?
答案 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>