У меня есть проект 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;