2014-06-10 204 views
0

我想将多个会话变量传递给多个asp页面。但是,只有最后一个ImageID和Extention值会传递到asp页面。我需要运C#会话变量

int key = Convert.ToInt32(StockSummary.SelectedRow.Cells[6].Text); 
    int index = 1; 
    try 
    { 

     transportFbConn.Open(); 

     if (transportFbConn.State == ConnectionState.Closed) 
     { 
      transportFbConn.Open(); 
     } 
     var sqlquerry = String.Format("select image_key,File_EXT from IMAGE_LIST where SOURCE_PK = {0}", key); 
     transportFbCommand = new FbCommand(sqlquerry, transportFbConn); 
     transportFbReader = transportFbCommand.ExecuteReader(); 
     if (transportFbReader.HasRows) 
     { 
      while (transportFbReader.Read()) 
      { 
       ImageID = transportFbReader.GetString(0); 
       extention = transportFbReader.GetString(1); 
       //Open PDF: 
       if (ImageID != "") 
       { 
        Session.Add("IMGID", ImageID); 
        Session.Add("Ext", extention); 
        Response.Write(string.Format("<script>window.open('{0}','_blank');</script>", "Trace"+index+".aspx")); 
       } 
       else 
       { 
        this.ErrorLabel.Text = "No Trace Information found for Part Number : " + this.TextTextBox.Text; 
       } 
       index++; 
      } 
     } 

我尝试了数组列表,但我得到的对象空引用:

int key = Convert.ToInt32(StockSummary.SelectedRow.Cells[6].Text); 
     int index = 1; 
     int arrayindex = 0; 
     ArrayList imageid = new ArrayList(); 
     ArrayList extention = new ArrayList(); 
     try 
     { 

      transportFbConn.Open(); 

      if (transportFbConn.State == ConnectionState.Closed) 
      { 
       transportFbConn.Open(); 
      } 
      var sqlquerry = String.Format("select image_key,File_EXT from IMAGE_LIST where SOURCE_PK = {0}", key); 
      transportFbCommand = new FbCommand(sqlquerry, transportFbConn); 
      transportFbReader = transportFbCommand.ExecuteReader(); 
      if (transportFbReader.HasRows) 
      { 
       while (transportFbReader.Read()) 
       { 
        imageid.Insert(arrayindex, transportFbReader.GetString(0)); 
        extention.Insert(arrayindex, transportFbReader.GetString(1)); 
        //Open PDF: 
        if (ImageID[arrayindex].ToString() != "") 
        { 
         Session.Add("IMGID", ImageID[arrayindex]); 
         Session.Add("Ext", extention[arrayindex]); 
         Response.Write(string.Format("<script>window.open('{0}','_blank');</script>", "Trace"+index+".aspx")); 
        } 
        else 
        { 
         this.ErrorLabel.Text = "No Trace Information found for Part Number : " + this.TextTextBox.Text; 
        } 
        index++; 
        arrayindex++; 
       } 
      } 
+0

该会话是一个'键''值'存储。你是否试图在同一个密钥下存储多个值? – TheNorthWes

回答

1

最好创建一个数组,将所有键值存储在临时变量中,然后将其存储在会话中。 ,因为使用相同的密钥将覆盖值

ArrayList ar_IMGID = new ArrayList(); 
ArrayList ar_Ext = new ArrayList(); 

while (transportFbReader.Read()) 
      { 
       ImageID = transportFbReader.GetString(0); 
       extention = transportFbReader.GetString(1); 
       //Open PDF: 
       if (ImageID != "") 
       { 

        ar_IMGID.Add(ImageID); 
        ar_Ext.Add(extention); 
       } 
      } 
Session.Add("IMGID", ar_ImageID); 
Session.Add("Ext", ar_Ext); 
+0

我试图arraylist,但我得到的“对象null参考”: – user3314399

+0

可能是你有代码错误..请发送给我的代码 –

+0

请参阅上文。我包括更新。 – user3314399

1

如果它被覆盖相同的密钥值会话变量。所以你总是用最新的值更新相同的密钥。

+0

对,但我每次都调用新页面,直到循环结束,它才打开新页面。这就是为什么会话变量被覆盖:Response.Write(string.Format(“”,“Trace”+ index +“.aspx”)); – user3314399

1

您应该在会话中放置ImageId列表而不是单个图像,因为您只能有一个由同一个键表示的对象。它基本上每次都通过循环覆盖。

+0

我该如何执行一个新浏览器的开启,然后循环执行剩余的代码? – user3314399