会话变量和列表对象未正确更新

时间:2013-12-18 19:58:37

标签: asp.net asp.net-mvc asp.net-mvc-3

我应该能够解决这个问题,但是我已经和它斗争了很长一段时间了。

我有一个弹出页面,其中包含一些用户可以选择的可用请求。根据用户访问的页面,可能有一个请求或多个请求可供该用户使用。单个和多个请求都保存在不同的会话变量中。

我需要知道用户在流程开始时选择的单个请求。它工作正常,除非允许用户添加多个请求,单个请求会话变量也会更新。

例如,单个请求变量具有“佛罗里达”;然后,用户到达多个请求页面并将GA和LA添加到多个请求会话变量。单个请求变量也会更新为包含GA和LA,即使该标志为false且从未到达该行。我不希望它被更新。我需要始终提供单个请求,因此用户可以在请求时查看。

以下是问题发生的示例代码:

List<Request> temp = new List<Request>();
List<Request> mySearchRequest = new List<Request>();
List<Request> listSingleRequest = new List<Request>();
if (SessionWrapper.currentRequest.AvailableRequests != null)
{
    mySearchRequest = (List<Request>)SessionWrapper.currentRequest.AvailableRequests;
}

if (SessionWrapper.currentRequest.MultipleRequests != null)
{
    temp = (List<Request>)SessionWrapper.currentRequest.MultipleRequests;
    var test = temp.Find(delegate(Request req) { return req.RequestId == id && req.Desc == description; });
    // Checking if we have on the container already
    if (mySearchRequest.Any(r => r.RequestId == id && r.Desc == description) == false)
    {
        mySearchRequest.Add(test);
        if (SessionWrapper.currentRequest.SingleRequest == true && mySearchRequest.Count() == 1)
        {
            listSingleRequest.Add(test);
            SessionWrapper.currentRequest.singleRequest = listSingleRequest ;
            listSingleRequest = null;
        }
    }
}
//Set multiple request session here

非常感谢您的帮助。 谢谢, JF

1 个答案:

答案 0 :(得分:0)

几乎整夜玩完之后,我能够解决它。我不确定这是否是最有效的方法,但它现在有效。

if (SessionWrapper.currentRequest.MultipleRequests != null)
{
    temp = (List<Request>)SessionWrapper.currentRequest.MultipleRequests;
    var test = temp.Find(delegate(Request req) { return req.RequestId == id && req.Desc == description; });
    // Checking if we have on the container already
    if (mySearchRequest.Any(r => r.RequestId == id && r.Desc == description) == false)
    {
        mySearchRequest.Add(test);
        if (SessionWrapper.currentRequest.SingleRequestPage == true && mySearchRequest.Count() == 1)
        {
            foreach (var item in test)
            {
               //Create a new request object and add it to the list
                Request request =  new Request();
                request.RequestId == item.RequestId;
                request.Description == item.Description;
                listSingleRequest.Add(request);
            }
            SessionWrapper.currentRequest.singleRequest = listSingleRequest ;
            listSingleRequest = null;
        }
    }
}


 if (SessionWrapper.currentRequest.singleRequest != null)
   {
      tempRequest = SessionWrapper.currentRequest.singleRequest.ToList();
      foreach (var test in tempRequest)
      {
       Request request =  new Request();
       request.RequestId == item.RequestId;
       request.Description == item.Description;
       listSingleRequest.Add(request);
     }
    SessionWrapper.currentRequest.ViewRequest = listSingleRequest;
    listSingleRequest = null;
 }