4

我正在使用 asyncfileupload 控件上传文件,我正在以这样的视图状态获取路径:

protected void ProcessUpload(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
    string name = System.IO.Path.GetFileName(e.FileName); 
    string dir = Server.MapPath("upload_eng/");
    string path = Path.Combine(dir, name);
    ViewState["path"] = path;
    engcertfupld.SaveAs(path);
}

现在,当我尝试在 buttonclick 事件中保存该路径时,我没有获得 viewstate 的值:

protected void btnUpdate_Click(object sender, EventArgs e)
{
   string filepath = ViewState["path"].ToString(); // GETTING NULL in filepath
}

在这个文件路径中,我得到了 null 实际上我得到了错误NULL REFERENCE EXCEPTION

我现在能做什么?

4

2 回答 2

4

将 Path 值放入Session对象而不是 ViewState 中,如下所示:

protected void ProcessUpload(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{

    ....
    string path = Path.Combine(dir, name);
    Session["path"] = path;
}

然后在按钮点击:

protected void btnUpdate_Click(object sender, EventArgs e)
{
  if (Session["path"] != null)
  {
     string filepath = (string) Session["path"];
  }
}
于 2012-11-30T10:31:44.710 回答
1

我猜上传过程不是“真正的”回发,所以 ViewState 不会在客户端刷新,也不会包含单击 btnUpdate_Click 时的路径

您应该做的是使用 OnClientUploadComplete 客户端事件来检索上传的文件名,并将其存储在将在 btnUpdate_Click 上发布在服务器上的 HiddenField 中。

这是一个完整的示例,其中上传的文件名用于显示上传的图像而无需回发:

http://www.aspsnippets.com/Articles/Display-image-after-upload-without-page-refresh-or-postback-using-ASP.Net-AsyncFileUpload-Control.aspx

于 2012-11-30T10:26:27.520 回答