2014-03-25 57 views
0

在下面的代码中,我获取了arraylist中的所有id并将其存储在sample.aspx中的会话中,并在test.aspx.Now中检索会话值在页面加载时将项目ID分配给DataSet dsField。如何单独获取该值。 sample.aspx从会话中检索值并将其分配给变量

Button btnView = (Button)e.CommandSource; 
Label lblProjectId = (Label)btnView.Parent.FindControl("ProjectID"); 
Label lblBatchID = (Label)btnView.Parent.FindControl("BatchID"); 
Label lblImageID = (Label)btnView.Parent.FindControl("ImageID"); 
Label lblReasons = (Label)btnView.Parent.FindControl("Reasons"); 
Label lblLayerID = (Label)btnView.Parent.FindControl("LayerID"); 
Label lblStatusID = (Label)btnView.Parent.FindControl("StatusID"); 
Label lblProcessID = (Label)btnView.Parent.FindControl("ProcessID"); 
ArrayList SearchUrlValues = new ArrayList(); 
SearchUrlValues.Add(lblProjectId); 
SearchUrlValues.Add(lblBatchID); 
SearchUrlValues.Add(lblProjectId); 
SearchUrlValues.Add(lblImageID); 
SearchUrlValues.Add(lblReasons); 
SearchUrlValues.Add(lblLayerID); 
SearchUrlValues.Add(lblStatusID); 
SearchUrlValues.Add(lblProcessID); 
Session["ProjectDetails"] = SearchUrlValues.ToArray(); 
Response.Write(SearchUrlValues); 

Test.aspx文件:

Array SearchUrlValues = (Array)Session["ProjectDetails"]; 

if (!IsPostBack) 
{ 
     DataSet dsField = GetFieldData(10);//how to assign projectid instead of 10 
     gmasFieldsContr.dtFieldsInfo = dsField.Tables[0]; 
     gmasFieldsContr.EnumTable = dsField.Tables[1]; 
     gmasFieldsContr.RegularExpressionTable = dsField.Tables[3]; 
     gmasFieldsContr.BindData(); 
} 
public DataSet GetFieldData(int iProjectID) 
    { 
     try 
     { 
      SqlParameter[] SqlParam = new SqlParameter[1]; 

      SqlParam[0] = new SqlParameter("@i_ProjectID", SqlDbType.Int); 
      SqlParam[0].Value = iProjectID; 


      return ExecuteQuery(SqlParam, "spGetFieldData"); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message.ToString()); 
     } 
    } 

回答

1

编辑

在Sample.aspx不SearchUrlValues存储为数组

Button btnView = (Button)e.CommandSource; 
Label lblProjectId = (Label)btnView.Parent.FindControl("ProjectID"); 
Label lblBatchID = (Label)btnView.Parent.FindControl("BatchID"); 
Label lblImageID = (Label)btnView.Parent.FindControl("ImageID"); 
Label lblReasons = (Label)btnView.Parent.FindControl("Reasons"); 
Label lblLayerID = (Label)btnView.Parent.FindControl("LayerID"); 
Label lblStatusID = (Label)btnView.Parent.FindControl("StatusID"); 
Label lblProcessID = (Label)btnView.Parent.FindControl("ProcessID"); 
ArrayList SearchUrlValues = new ArrayList(); 
SearchUrlValues.Add(lblProjectId); 
SearchUrlValues.Add(lblBatchID); 
SearchUrlValues.Add(lblProjectId); 
SearchUrlValues.Add(lblImageID); 
SearchUrlValues.Add(lblReasons); 
SearchUrlValues.Add(lblLayerID); 
SearchUrlValues.Add(lblStatusID); 
SearchUrlValues.Add(lblProcessID); 
Session["ProjectDetails"] = SearchUrlValues; // Store it as ArrayList 
Response.Write(SearchUrlValues); 

然后进行测试。 aspx,将Session对象转换为ArrayList;

var SearchUrlValues = (ArrayList)Session["ProjectDetails"]; 

if (!IsPostBack) 
{ 
    var projectId = int.Parse(SearchUrlValues[0].ToString()); 
    DataSet dsField = GetFieldData(projectId);//how to assign projectid instead of 10 
    gmasFieldsContr.dtFieldsInfo = dsField.Tables[0]; 
    gmasFieldsContr.EnumTable = dsField.Tables[1]; 
    gmasFieldsContr.RegularExpressionTable = dsField.Tables[3]; 
    gmasFieldsContr.BindData(); 
} 

顺便说一下,请注意,您要添加两次lblProjectId;

SearchUrlValues.Add(lblProjectId); // First 
SearchUrlValues.Add(lblBatchID); 
SearchUrlValues.Add(lblProjectId); // Second 

此外,我宁愿使用一个对象来将这些值存储在会话中。

public class SearchUrlValues 
{ 
    public int lblProjectId { get; set; } 
    public int lblBatchID { get; set; } 
    public int lblImageID { get; set; } 
    public int lblReasons { get; set; } 
    public int lblLayerID { get; set; } 
    public int lblStatusID { get; set; } 
    public int lblProcessID { get; set; } 
} 

然后,而不是arraylist;

var newSearchUrlValues = new SearchUrlValues() 
{ 
    lblProjectId = lblProjectId, 
    lblBatchID = lblBatchID, 
    lblImageID = lblImageID, 
    lblReasons = lblReasons, 
    lblLayerID = lblLayerID, 
    lblStatusID = lblStatusID, 
    lblProcessID = lblProcessID 
}; 

Session["ProjectDetails"] = newSearchUrlValues; 

并检索它像;

var searchUrlValues = (SearchUrlValues)Session["ProjectDetails"]; 
var projectId = searchUrlValues.lblProjectId; 
+0

它会引发错误在VAR专案编号无法应用用[]索引,以类型的System.Array的表达式=(int)的SearchUrlValues [0]; – user3319384

+0

@ user3319384好的,我已经更新了答案。会话对象需要转换为ArrayList。 – coni2k

+0

它会在var SearchUrlValues =(ArrayList)Session [“ProjectDetails”]上抛出错误;无法投射'System.Object []'类型的对象来键入'System.Collections.ArrayList'。 – user3319384

0

尝试像这样

ArrayList SearchUrlValues = (ArrayList)Session["ProjectDetails"]; 

if (!IsPostBack) 
{ 
     DataSet dsField = GetFieldData(Convert.ToInt32(SearchUrlValues[0].ToString())); 
    //fetech 1st element of array List 
     gmasFieldsContr.dtFieldsInfo = dsField.Tables[0]; 
     gmasFieldsContr.EnumTable = dsField.Tables[1]; 
     gmasFieldsContr.RegularExpressionTable = dsField.Tables[3]; 
     gmasFieldsContr.BindData(); 
} 
public DataSet GetFieldData(int iProjectID) 
    { 
     try 
     { 
      SqlParameter[] SqlParam = new SqlParameter[1]; 

      SqlParam[0] = new SqlParameter("@i_ProjectID", SqlDbType.Int); 
      SqlParam[0].Value = iProjectID; 


      return ExecuteQuery(SqlParam, "spGetFieldData"); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message.ToString()); 
     } 
    } 
+0

它引发错误无法将[]的索引应用于DataSet中的system.array类型的表达式dsField = GetFieldData(SearchUrlValues [0] .ToString()); – user3319384

+0

@ user3319384更新了我的答案 –

+0

它抛出错误onvar SearchUrlValues =(ArrayList)Session [“ProjectDetails”];无法将类型为'System.Object []'的对象转换为键入'System.Collections.ArrayList' – user3319384

相关问题