Обновить строку в HttpContext.Current.Session - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть проект MVC2 .NET 3.5, который содержит индекс с возможностью поиска, содержащий ссылки на действия «Редактировать / Удалить».Результаты поиска сохраняются в сеансе.Когда запись модифицируется, изменение сохраняется в базе данных, но при возврате к индексу результатов поиска после действия оно все еще показывает неизмененную кэшированную запись, если сеанс не будет восстановлен.Есть ли способ обновить строку в сеансе?

public class SearchResultService
{
    private CoolRepository cr = new CoolRepository();

    private List<SearchResult> SearchResults
    {
        get
        {
            List<SearchResult> accessCodes;
            if (HttpContext.Current.Session["SearchResults"] != null)
            {
                accessCodes = (List<SearchResult>)HttpContext.Current.Session["SearchResults"];
            }
            else
            {
                //Create accessCodes data store and save in session
                accessCodes = new List<SearchResult>();
                accessCodes = this.InitAccessCodeData();
                HttpContext.Current.Session["SearchResults"] = accessCodes;
            }

            return accessCodes;
        }
    }

    public IQueryable<SearchResult> GetQueryable()
    {
        return this.SearchResults.AsQueryable();
    }

    private List<SearchResult> InitAccessCodeData()
    {
        int agentInfoID = this.cr.FindAgentInfoID();
        var agentInfos = from a in this.cr.cd.AgentInfos
                         where a.ID == agentInfoID
                         select a;


        List<SearchResult> accessCodes;            

       accessCodes = (from c in this.cr.cd.RACodes
                           <!--- ...omitted --->                
                           select new SearchResult
                           {
                               ID = c.ID,
                               Email = c.Email,
                              <!--- ...omitted --->
                           }).OrderByDescending(c => c.ID).ThenBy(c => c.ActivationDate).ToList();          

        return accessCodes;
    }        
}

 public class SearchResult
{
    public int ID { get; set; }        
    public string Code { get; set; }
    public string Email{ get; set; }


    <!--- below properties omitted --->


}

Я устанавливал для сеанса значение NULL после действий в контроллере, чтобы изменения отображались в индексе, но теперь требуется слишком много времени для воссоздания сеанса с таким большим количествомзаписи.

System.Web.HttpContext.Current.Session["SearchResults"] = null; 

Редактировать: я нашел решение своей проблемы

var results = System.Web.HttpContext.Current.Session["SearchResults"];
IList<SearchResult> accessCodes = (IList<SearchResult>)results;
var origionalRow = accessCodes.Where(a => a.ID == id).FirstOrDefault();
var copyRow = origionalRow;
copyRow.IsCancelled = true;
accessCodes.Remove(origionalRow);
accessCodes.Add(copyRow);

System.Web.HttpContext.Current.Session["SearchResults"] = accessCodes;
...