1

我正在创建一个从 (SQL) Visual Studio 数据库文件 (.mdf) 加载数据的 asp.net 页面。

数据被加载到包含从数据库获得的用户数据的用户对象列表 (List) 中。然后,此数据将显示在 ASP.net 表中,并在第一列中带有一个复选框。这允许查看网页的人在理论上通过复选框选择用户。

我在同一页面上也有一个 ASP.net 按钮,单击该按钮将导致回发并通过表格行并正确识别哪些行已检查和未检查。此时我能够获取用户数据,因为 Page_Load 事件被触发并且数据库内容被第二次重新加载。

显然,获取每个 Page_Load 上的完整用户列表可能会变得非常昂贵,因此我开始使用 IsPostBack 变量进行调查,该变量允许我确定是按钮单击还是标准页面加载。

我在使用 IsPostBack 时遇到的问题是,在初始 Page_Load 事件中加载到 List 中的数据库内容现在将等于 null,因为永远不会发生对数据库的调用。这是可以理解的预期行为,我的问题是保留列表内容的最佳方法是什么,以便单击按钮可以访问在初始 Page_Load 上从数据库加载的数据,而无需执行另一个数据库查询?

谢谢。

4

3 回答 3

1

如果它不是您要获取的用户特定数据,请将其存储在缓存中。

Asp.net 缓存

如果它使用特定的数据将其存储在会话中。

会议

于 2012-05-25T08:14:09.760 回答
1

我建议缓存数据库中的结果,然后像往常一样进行绑定。还有其他选项,例如将其存储在 ViewState 中,但这可能会导致更大的页面大小,具体取决于数据(我个人不是 ViewState 的粉丝,但它是一个选项)。

归根结底,您需要一定数量的数据才能使页面正常工作,您无法避免以某种方式存储和检索这些数据,因此归结为决定什么是最可维护的(和预期的)方式,没有不可接受的权衡。在我看来,这将缓存数据库结果,但这实际上取决于应用程序。

于 2012-05-25T08:12:31.327 回答
0

在你的类中保留一个私有变量怎么样?

private List<myObject> _data = null;

private void Page_Load(object sender, System.EventArgs e)
{
    if(!Page.IsPostBack)                        
    {
        _data = loadDataFromDb();
    }
}

private void Button_Click()
{
    if(_data != null)
       //Do something with the data
}

-更新:我认为您可以通过这种方式避免回发,因此您只需加载一次数据。

于 2012-05-25T08:13:48.627 回答