上传文件时不能异步分配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;

我得到属性的默认值,而不是我在上传完成事件中分配的那个;

上传文件时不能异步分配ViewState

部分回发(Ajax Control Troolkit)通常在服务器上呈现完整的页面,但只将更改传输到客户端,Javascript魔术导致页面的部分更新,包括ViewState(嵌入在隐藏的HTML字段中)。

AsyncFileUpload控件不以这种方式工作,由于张贴表单和上传文件的差异。

实际上,你所描述的行为在Codeplex上对ACT问题的响应中得到了解释。

简短的回答:你不能这样做。