我刚刚开始了一份新工作并继承了一个噩梦般的WebForms .net 4.0项目,这个项目在很多地方都出错了。
我有一个用户控件在ViewState中存储DataTable。代码通过索引号引用整个代码中的列,这使得它完全不可读。我知道我可以按名称引用列以使其更具可读性,但我更愿意将其分解为List。
以前的开发人员将列表存储在ViewState中,因为更改无法持久保存回数据库,我们读取数据,销售人员可以对定价进行修改,然后将信息推送到XML格式以生成销售PDF格式的订单。所以我们需要一种暂时存储的机制。
如果我有从头开始的奢侈品,我会用JSON将数据拉下来并在客户端完成,但我还没有那么奢侈。
自从我使用DataTables以来,我已经很长很长时间了 我确定将它放在ViewState中是不好的 正确?它将在ViewState上放置什么样的负载; 我们正在寻找44列,通常是25行。 :■
其次,如果将List放入其中有很大的不同 ViewState与DataTable相反,或者它们都与每个都一样糟糕 其他 - 在这种情况下,我对我目前的职位没有任何伤害 退出?
第三个问题,对行的更新会自动更新 ViewState DataTable,与List相同吗?
最后一个,更多的探索建议。哪里是最好的地方 存储此信息(最好是List)服务器端 - 会 会话或缓存更好吗?
答案 0 :(得分:3)
你是对的。将数据表存储在ViewState中是一个糟糕的主意。
在ViewState中存储列表仍然很糟糕,可能比存储DataTable要好一些。
目前还不清楚“更新会自动发生在DataTable上”。除非您从ViewState检索DataTable并以编程方式应用任何更新,否则我怀疑是这种情况。如果使用List,则必须执行相同的操作。
会话可能更好,但您可能遇到可伸缩性问题。坦率地说,我会将它存储在Session中,但会选择使用Out of Proc状态提供程序之一。这样,您的序列化数据表不会在每次请求时发送到客户端,从而使您的页面大小非常大,同时您可以选择将此序列化数据存储在不同的位置,例如SQL Server或ASP.NET State Server。