Çok basit olması gereken bir şey yapmaya çalışıyorum ... Kullanıcının bir grup seçtiği bir açılır menüye sahip bir sitem var. Daha sonra, kullanıcı menülerden querystring argümanlarını kullanarak sitede gezinir. Bu yüzden önbelleğe alma işleminin sorgusuza bağımlı olmasını istiyorum - bu işe yarıyor. Önbelleğin, seçtikleri gruba bağımlı olmasını da istiyorum.BOTH kullanarak önbelleğe alma varibyparam ve değişkene özel
Ancak, querystring boş olduğunda, önbellek öğesi işe yaramıyor gibi görünüyor - sayfa, son seçilen grup için sürümün aynısı. Son olarak
public static int? GetCurrentAtomIdFromContext(HttpContext context)
{
int entityId;
if (context.Session == null)
{
throw new InvalidOperationException("Session is null");
}
var sessionEntityId = context.Session["CurrentEntityId"];
if (sessionEntityId == null || string.IsNullOrEmpty(sessionEntityId.ToString()))
{
return null;
}
if (!int.TryParse(sessionEntityId.ToString(), out entityId))
{
return null;
}
return entityId;
}
belirten kod:
Benim VaryByCustom kodu şöyle<%@ OutputCache Duration="300" VaryByCustom="currentAtomId" VaryByParam="documentId;folderId;sectionId;renderMode;typeId" %>
:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
switch (custom)
{
case "currentAtomId":
var currentAtomId = SecurityManifold.Create().CurrentAtomId;
var returnString = currentAtomId == null ? Guid.NewGuid().ToString() : currentAtomId.ToString();
return returnString;
default:
throw new ArgumentException(string.Format("Argument '{0}' is not a valid cache argument.", custom));
}
}
CurrentAtomId çağrısı bu aşağı kaynar Benim önbellek yönergesi şöyle CurrentEntityId şudur:
var selectedEntityId = this.lstSecurityEntities.SelectedValue;
if (string.IsNullOrEmpty(selectedEntityId))
{
return;
}
Session["CurrentEntityId"] = selectedEntityId;
var possibleQueryString = Request.QueryString.ToString();
if (!string.IsNullOrEmpty(possibleQueryString))
{
possibleQueryString = "?" + possibleQueryString;
}
Response.Redirect("default.aspx" + possibleQueryString);
Şaşkınım. Herhangi bir düşünce takdir edilecektir.