0

我们有一个正在尝试修复的错误。看起来一个用户可以看到另一个用户的数据,因为他们同时访问了同一个 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,它将解释我们的错误 :)

谢谢

设拉子

4

2 回答 2

1

对我来说听起来像是缓存问题。MasterPages 不会在会话之间保留数据,但 Cache 会。在您的项目中找到您将信息放入缓存的任何地方,并确保没有用户或会话特定的数据进入其中。缓存应该只保存在给定时间适用于所有用户的信息。

于 2009-12-01T16:35:54.110 回答
1

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

int property MyInt {
    get { return Convert.ToInt32(ViewState["MyInt"]);}
    set { ViewState["MyInt"] = value; }
}
于 2009-12-01T16:54:27.237 回答