C# ASP.Net维护按钮单击事件的对象列表

C# ASP.Net维护按钮单击事件的对象列表,c#,asp.net,C#,Asp.net,我正在创建一个asp.net页面,该页面从(SQL)visual studio数据库文件(.mdf)加载数据 数据被加载到包含从数据库获得的用户数据的用户对象列表(list)中。然后,此数据显示在ASP.net表格中,第一列中有一个复选框。这使得浏览网页的人理论上可以通过复选框选择用户 我在同一页上也有一个ASP.net按钮,单击该按钮将导致返回并浏览表行,并正确识别哪些行已检查和未检查。在触发Page_Load事件并第二次重新加载数据库内容时,我能够在此时获取用户数据 显然,获取每个页面加载的

我正在创建一个asp.net页面,该页面从(SQL)visual studio数据库文件(.mdf)加载数据

数据被加载到包含从数据库获得的用户数据的用户对象列表(list)中。然后,此数据显示在ASP.net表格中,第一列中有一个复选框。这使得浏览网页的人理论上可以通过复选框选择用户

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

显然,获取每个页面加载的完整用户列表可能会变得非常昂贵,因此我已经开始使用IsPostBack变量进行研究,该变量允许我识别它是按钮单击还是标准页面加载

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


谢谢。

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


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

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

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
}
私有列表_data=null;
私有无效页面加载(对象发送方,System.EventArgs e)
{
如果(!Page.IsPostBack)
{
_data=loadDataFromDb();
}
}
专用作废按钮\u单击()
{
如果(_data!=null)
//对数据做点什么
}

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

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

如果其使用特定数据,则将其存储在会话中


尽管我当前的实现与此基本相同,但我使用的是protected not private。这是一个伪代码示例,但适应您的代码应该不会太困难。它看起来或多或少与我的代码相同,但我的代码不起作用,除非您将对象作为private并且我的对象受到保护。当你点击页面重新加载的按钮时,这并不理想,你最终会进行两次数据库调用,这正是我试图避免的。好的@Dizzle,我现在明白你的意思,再次查看更新的答案这是我的问题,当我问我最初的问题时,列表中的数据在按钮点击功能中为空。好的,谢谢,看起来我将使用稍微不同的方法。将超链接中的用户ID作为get变量传递到另一个asp.net页面,而不是读取复选框值并发回同一页面。作为新的asp.net用户,我遇到了同样的问题,答案确实是在初始页面加载时加载数据并将其存储在缓存中,然后在回发页面加载时从缓存中检索数据。这个回答确实帮助了我+1.看来这是正确的答案,最终我走了另一条路