上传文件时无法异步分配ViewState

时间:2013-03-09 07:33:59

标签: c# asp.net file-upload asynchronous viewstate

我正在尝试使用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;

我得到属性的默认值,而不是我在上传完成事件中指定的属性;

2 个答案:

答案 0 :(得分:2)

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

AsyncFileUpload控件不能以这种方式工作,因为发布表单和上传文件不同。

实际上,您描述的行为是在对ACT issue on Codeplex的回复中解释的。

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

答案 1 :(得分:1)

您可以使用此链接在asp.net Ajax中为文件上传提供完整的方法,以帮助您。

Using ASP.Net AJAX-Control Toolkits AsyncFileUpload-Control