0

我正在尝试使用 Asp.NetAjaxFileUpload控件异步为隐藏字段分配值,但是当我访问它时,我得到空值;

<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;

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

4

1 回答 1

3

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

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

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

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

于 2013-03-09T09:14:57.367 回答