Asp.net 导致未设置对象引用的会话变量

Asp.net 导致未设置对象引用的会话变量,asp.net,Asp.net,我有一个ASP.NET 4.5 web应用程序,有两个页面:Index.aspx和Preview.aspx 在索引页上,我将名为inputList的列表存储在会话变量中。 此外,我还将上传的excel文件中名为fileName的字符串存储在另一个会话变量中。我使用Server.Transfer访问Preview.aspx 这里有两个私有变量,我用这两个会话变量初始化它们 问题是,如果我在索引页上等待超过1分钟,然后点击按钮执行Server.Transfer,当我到达预览页时,我会得到“对象引用未

我有一个ASP.NET 4.5 web应用程序,有两个页面:Index.aspx和Preview.aspx 在索引页上,我将名为inputList的列表存储在会话变量中。 此外,我还将上传的excel文件中名为fileName的字符串存储在另一个会话变量中。我使用Server.Transfer访问Preview.aspx

这里有两个私有变量,我用这两个会话变量初始化它们

问题是,如果我在索引页上等待超过1分钟,然后点击按钮执行Server.Transfer,当我到达预览页时,我会得到“对象引用未设置为对象的实例”

发生这种情况是因为会话变量超时吗? 这就是my web.config的功能:

应用程序池上的空闲超时为20分钟。 我不明白为什么我会犯这个错误

可能是服务器.Transfer导致我的本地变量为空

这是基于浏览器的吗?我注意到在IE&FF中,这种情况发生在闲置约1分钟后,但在Chrome上,这种情况发生在10分钟后

代码:

//Index.aspx
私有字符串文件名;
私有列表inputList=新列表();
//当用户单击上载按钮时
受保护的void btnUpload\u单击(对象发送方,事件参数e)
{
inputList.Clear();
fileName=UserId.Text+“”+FileUploadToServer.PostedFile.fileName;
会话[“文件名”]=文件名;
对于(int i=0;i
*更新:两个页面上的会话id相同。但是会话变量为空


谢谢大家!

你能添加一些代码吗?在索引页上我有:Session[“fileName”]=“SomeUserName”;和会话[“输入列表”]=输入列表//其中inputList是一个列表,在将其分配给会话[“inputList”]之前,我向其添加了一些值。当用户按下按钮时,我执行Server.Transfer(“~/Preview.aspx”);当它到达preview.aspx时,我在PageLoad中使用了:if(!IsPostBack){fileName=Session[“fileName”]作为字符串;inputList=Session[“inputList]作为列表;它在本地主机上运行良好,但当我将它放在服务器上时(IIS 7.5),在页面之间等待一分钟后,它会给我这个错误。请编辑问题,而不是在注释中发布代码。虽然这对解决问题没有帮助,但我想在这里补充一点,如果您使用这样的会话变量来存储大对象,您将面临可伸缩性和性能问题。如果inputList包含100个字符串值,每个字符串值大约3-20个字符,这会对性能造成多大影响吗?我知道像其他人一样对数十万个项目的列表执行此操作是错误的。但这可能是问题所在吗?
//Index.aspx
private string fileName;
private List<string> inputList = new List<string>();

//when the user clicks on the upload button
protected void btnUpload_Click(object sender, EventArgs e)
{
   inputList.Clear();
   fileName = UserId.Text + "_" + FileUploadToServer.PostedFile.FileName;
   Session["fileName"] = fileName;
   for (int i = 0; i < clientInputRange.Count(); i++)
   {
     string clientValue = clientInputRange.ElementAt(i).Text;
     inputList.Add(clientValue);
   }
   Session["inputList"] = inputList;
}

protected void PreviewBtn_Click(object sender, EventArgs e)
{
  Server.Transfer("~/Preview.aspx");
}

//Preview.aspx
private string fileName = "";
private List<string> inputList = new List<string>();

protected void Page_Load(object sender, EventArgs e)
{
   if(!IsPostBack)
   {
       inputList = Session["inputList"] as List<string>;
       fileName = Session["fileName"] as string;

       //Here is where I'm getting the error
       for (int i = 0; i < inputList.Count; i++)
       {
           ....
       }
   }
}