在ASP.net主页中说明

时间:2009-12-01 16:03:38

标签: asp.net state master-pages

我们有一个我们正在尝试修复的错误。看起来一个用户可以看到他们同时点击同一个aspx页面的另一个用户数据。

我想知道:如果我们将数据存储在母版页的属性中,那么同时运行的所有页面都会看到该数据。

有一个母版页:

public class MyMasterBase : System.Web.UI.MasterPage
{
    private int myInt;
}

从aspx页面创建对母版页的引用:

MyMasterBase master = Page.Master as MyMasterBase;

然后两个用户同时调用aspx页面:

  • 第一个用户将myInt设置为1
  • 第二个用户将myInt设置为2
  • 如果第一个用户读取myInt值会是什么?

我希望它会是1,但如果它是2则会解释我们的错误:)

由于

西拉

2 个答案:

答案 0 :(得分:1)

听起来像是一个缓存问题。 MasterPages不会在会话之间保留数据,但Cache会。在项目中随处查找您将信息放入缓存并确保没有用户或特定于会话的数据。缓存应该只保存在给定时间适用于所有用户的信息。

答案 1 :(得分:1)

这取决于你对myInt的处理方式。如果您将其值存储在会话中,请检查用户的身份(Page.User.Identity.Name),如果它们相等,您将读取最新的设定值。如果将它存储在ViewState中,每个用户都将读取自己的值。如果你根本不坚持它(我假设是这种情况),则不会保存该值(对每个用户的每个请求重置)。可能你想要的是这样的东西(只是一个猜测):

int property MyInt {
    get { return Convert.ToInt32(ViewState["MyInt"]);}
    set { ViewState["MyInt"] = value; }
}