Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 从会话检索值并将其分配给变量_Asp.net - Fatal编程技术网

Asp.net 从会话检索值并将其分配给变量

Asp.net 从会话检索值并将其分配给变量,asp.net,Asp.net,在下面的代码中,我获取arraylist中的所有id,并将其存储在sample.aspx中的会话中,然后在test.aspx中检索会话值。现在我想将项目id分配给页面加载中的DataSet dsField。如何单独获取该值。 sample.aspx Button btnView = (Button)e.CommandSource; Label lblProjectId = (Label)btnView.Parent.FindControl("ProjectID"); Label lblBatch

在下面的代码中,我获取arraylist中的所有id,并将其存储在sample.aspx中的会话中,然后在test.aspx中检索会话值。现在我想将项目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());
        }
    }

已编辑

在Sample.aspx中,不将SearchUrlValue存储为数组

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);
然后test.aspx,将会话对象转换为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();
}
顺便说一下,请注意您添加了两次LBLProjectd

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;
像这样试试

 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());
        }
    }

它引发错误,无法在数据集dsField=GetFieldData(SearchUrlValues[0].ToString())中将带[]的索引应用于system.array类型的表达式;它在var SearchUrlValues=(ArrayList)会话[“ProjectDetails”]上抛出错误;无法将类型为“System.object[]”的对象强制转换为类型为“System.Collections.ArrayList”的对象。它引发错误,无法在var projectId=(int)SearchUrlValues[0]中对类型为System.array的表达式应用带[]的索引@用户3319384好的,我已经更新了答案。会话对象需要转换为ArrayList。它在var SearchUrlValues=(ArrayList)会话[“ProjectDetails”]上引发错误;无法将类型为“System.object[]”的对象强制转换为类型为“System.Collections.ArrayList”。@user3319384好的,已看到问题,请再次编辑。基本上,您将对象存储为ArrayList,并将其检索为ArrayList;它抛出的指定强制转换无效。