嗨我有一个用户控件,我在特定页面中多次调用,下面是该代码
private void BindMenu()
{
string menuContent = (string)Cache[_CacheKey];
if (string.IsNullOrEmpty(menuContent))
{
menuContent = GenerateMenu(CategoryId, 1);
Cache.Add(_CacheKey, menuContent, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
phMenu.Text = menuContent;
}
现在多次调用Bind菜单,因为我传递了不同的类别ID,如1,2,3。
但是,一旦类别Id为1,它就会将数据存储在缓存中,然后在同一页面上重复用户控制之后,它总是显示存储的数据,如缓存中所示。
我曾尝试删除缓存逻辑,数据反映是根据我的结果显示的用户控件,但它会增加页面加载时间。
任何帮助?
已解决的问题
private void BindMenu()
{
string menuContent = (string)Cache[_CacheKey+Convert.ToString(CategoryId)];
if (string.IsNullOrEmpty(menuContent))
{
menuContent = GenerateMenu(CategoryId, 1);
Cache.Add(_CacheKey+Convert.ToString(CategoryId), menuContent, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
phMenu.Text = menuContent;
}
答案 0 :(得分:0)
使用缓存将参数传递给Web用户控件是一个坏主意。
您需要使用属性。
在用户控件中声明public int
变量'代码,在其set
函数中,使用value
传递。
在用户控件的代码背后:
// Declare a public property
public int CategoryId
{
set
{
// use the value keyword to get the value passed from the main page:
if (string.IsNullOrEmpty(menuContent))
{
menuContent = GenerateMenu(value, 1);
phMenu.Text = menuContent;
}
}
}
在调用(包含)页面的代码中:
UserControl1.CategoryId = 1;
UserControl2.CategoryId = 2;
....