使用C#在asp.net中的Viewstate中没有获得价值?

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

我现在能做什么?

将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"]; } } 

我猜上传过程不是“真正的”回发,因此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