【问题标题】:Not getting value in Viewstate in asp.net using C#?使用 C# 在 asp.net 中的 Viewstate 中没有获得价值?
【发布时间】:2015-05-11 21:57:51
【问题描述】:

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

我现在能做什么?

【问题讨论】:

    标签: c# asp.net viewstate asyncfileupload


    【解决方案1】:

    将 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 不起作用?
    • 在方法的上下文中使用静态变量就足够了:)
    【解决方案2】:

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

    【讨论】:

    • 但我最初在 ProcessUpload 中获得了 viewstate 中的值,但无论它的回发与否,viewstate 都应该具有我猜的值
    • @ArindamDas :您在 ProcessUpload 中设置的值不会被发送回客户端以回发到服务器(因为这不是真正的回发)。服务器不会在回发之间存储 ViewState。客户端将 ViewState 存储在(有时是巨大的)隐藏字段中并将其发布回服务器。如果没有发生回发往返过程,则服务器无法将 ViewState 传输给客户端。这就是为什么我建议使用客户端事件处理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2016-10-20
    • 2021-03-28
    • 2016-01-30
    相关资源
    最近更新 更多