我正在尝试使用Asp.Net AjaxFileUpload
控件异步为隐藏字段赋值,但是当我访问它时,我得到空值;
<Ajax:AjaxFileUpload ID="FileUploadGaurdianPic" runat="server"
ThrobberID="myThrobber" MaximumNumberOfFiles="1"
OnUploadComplete="FileUploadGaurdianPic_UploadComplete" OnClientUploadComplete="uploadComplete" />
代码;
public string GuardianPic
{
get
{
if (ViewState["GuardianPic"] == null)
return "/Resources/Images/generic.jpg";
else
return ViewState["GuardianPic"].ToString();
}
set
{
ViewState["GuardianPic"] = value;
}
}
protected void FileUploadGaurdianPic_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
string path = Server.MapPath("~/Resources/Images/temp/");
string name = String.Empty;
string storedPath = String.Empty;
if (Directory.Exists(path))
{
name = Path.GetFileName(e.FileName);
storedPath = path + name;
FileUploadGaurdianPic.SaveAs(storedPath);
GuardianPic = "/Resources/Images/temp/"+name; // assigning the value here
}
}
但是当我尝试访问它时:
string ur = GuardianPic;
我得到属性的默认值,而不是我在上传完成事件中指定的属性;
答案 0 :(得分:2)
部分回发(Ajax Control Troolkit)通常在服务器上呈现完整页面,但仅将更改传输到客户端,其中Javascript魔术会导致页面的部分更新,包括ViewState(嵌入在隐藏的HTML中)字段)。
AsyncFileUpload控件不能以这种方式工作,因为发布表单和上传文件不同。
实际上,您描述的行为是在对ACT issue on Codeplex的回复中解释的。
简短回答:你不能这样做。
答案 1 :(得分:1)
您可以使用此链接在asp.net Ajax中为文件上传提供完整的方法,以帮助您。