【问题标题】:Session error :Object not set to an instance会话错误:对象未设置为实例
【发布时间】:2011-05-02 12:48:45
【问题描述】:

在我的网页中,我无法在远程服务器中回发会话变量。

问题是

如果页面不是 IsPostback,那么我可以获取会话变量。

但如果页面回发则出现错误。

当我使用异步文件上传时,也会出现同样的错误。我正在使用 asynchfileupload 上传图像并将其存储到会话变量中。然后单击按钮,我将数据保存到目录。

当我将任何文件上传到服务器时会出现此问题。我正在使用 asynchfileupload 控件上传图像。但它不经常发生。

这是我的代码

protected void AsynImageLoader_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
    if (AsynImageLoader.PostedFile != null)
    {
        string extension = System.IO.Path.GetExtension(AsynImageLoader.PostedFile.FileName);

        if (extension == ".jpg" || extension == ".gif" || extension == ".jpeg" || extension == ".png")
        {
            HttpPostedFile file = AsynImageLoader.PostedFile;
            Session["TempImage"] = ReadFile(file);
        }
    }
}

点击按钮

   var storedImage = Session["TempImage"] as byte[];
   String Strthumbpath = Server.MapPath("content\\thumbnail\\");
   if (storedImage != null)
   {
       System.Drawing.Image image = GetImage(storedImage);
       if (image != null)
       {
       image.Save(Strthumbpath + strFileName);
       }

       }

将值插入数据库。

经过一番谷歌搜索后,我了解到当任何文件添加到任何子目录或编辑 webconfig 时,都会导致应用程序重新启动。

如果是这样,我该如何解决..

提前致谢。

【问题讨论】:

  • 尝试将其作为隐藏表单值而不是会话传递 - 运气好吗?

标签: c# asp.net visual-studio asyncfileupload


【解决方案1】:

您的会话变量“User_id”似乎在您回发时被删除。您看到“对象未设置为对象的实例”,因为您尝试对空对象执行“ToString()”方法,这是不允许的。

希望这会有所帮助。

【讨论】:

  • 是的,你是对的。在这里我很困惑为什么会话变量 user_id 在回发和页面刷新时变为空。但是在 poage 负载上,如果不是回发,那么我得到了会话值。
【解决方案2】:

请提供代码,否则我们无法猜测问题所在。 不过,您始终可以在使用会话变量之前对其进行空值检查。

if(Session["User_id"]) != null;

【讨论】:

  • 我已经用代码更新了我的问题。你能检查一下吗。提前谢谢。
【解决方案3】:

检查远程计算机上的web.config 文件并确保sessionState 元素配置正确。您可能在远程服务器上将mode 属性设置为Off

正如其他人指出的那样,您可以在访问存储在会话中的对象的属性之前,对null 进行更多的防御性检查。

【讨论】:

  • 在我的 webconfig 文件中,会话被指定为
  • 您能否检查是否可以在不进行回发时在页面加载时创建 cookie,然后在页面回发时尝试读取 cookie 值?我认为存储和检索 ASP.NET 使用的会话 cookie 可能存在问题。您的 URL 中的主机名是否包含下划线字符 ('_')?
【解决方案4】:

第一次检查会话。

if (Session["User_id"] == null)
{
//Put code here

}
else
{
     Response.Write(Session["User_id"]);

     // or you can write as below

     Response.Write(Convert.ToString(Session["User_id"]));
}

永远不要使用.ToString()方法,你应该使用Convert.ToString,这也是处理空值。

【讨论】:

  • 我的疑问是为什么会话变量在页面回发和页面刷新时变为空。
【解决方案5】:

按钮点击事件发生在之后页面加载事件...这可能是它未设置的原因。 ;-)

【讨论】:

    【解决方案6】:

    您必须检查您的会话是否为空或为空,如下所示:

     if (Session["User_id"] == null || Session["User_id"].ToString() == string.Empty)
     {
        Response.write(Session["User_id"].ToString());
     }
     else
     {
       // your code
     }
    

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 2012-08-31
      • 2011-11-21
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多