上传文件时不能异步分配ViewState
本文关键字:异步 分配 ViewState 不能 文件 | 更新日期: 2023-09-27 18:03:17
我试图使用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;
我得到属性的默认值,而不是我在上传完成事件中分配的那个;
部分回发(Ajax Control Troolkit)通常在服务器上呈现完整的页面,但只将更改传输到客户端,Javascript魔术导致页面的部分更新,包括ViewState(嵌入在隐藏的HTML字段中)。
AsyncFileUpload控件不以这种方式工作,由于张贴表单和上传文件的差异。
实际上,你所描述的行为在Codeplex上对ACT问题的响应中得到了解释。
简短的回答:你不能这样做。