在回发中存储状态

时间:2008-09-18 18:06:56

标签: asp.net

跨回发存储字符串数据的最佳方法是什么。我需要存储多个实体的ID和名称。我想在viewstate中使用数据表,但这会使viewstate变得过大吗?我还不能使用数据库,因为我将插入一条记录,其他记录需要与之相关。所以我只是暂时存储它们,直到用户提交表单。

6 个答案:

答案 0 :(得分:4)

您实际上有很多选择 - 您选择的选项完全取决于您自己的应用程序的要求。

  1. ViewState - 您可以将数据添加到页面的viewstate中。这样做的好处是,数据仅在页面上的用户的生命周期中存活并将其发布回服务器。它比隐藏字段的另一个优点是,用户很难入侵它并改变你的价值观(我相信,事实上,你可以加密你的观点状态)。当然,缺点在于页面大小 - 您添加到视图状态的所有内容都会被丢弃在用户页面上,然后被发布回服务器。这使得它不适合存储大量数据。

  2. Cookie - 您可以以Cookie的形式将信息反馈给用户。在这种情况下,您可以声明信息将持续多长时间 - 对于打开浏览器的用户或特定日历时间的范围。每当用户点击该页面时,该信息将可用于您的应用程序的任何页面。坏消息是您可以存储的信息量有限,用户可以很容易地更改自己的cookie。

  3. 会话 - 您将用户的信息存储在您自己的服务器内存中(我将不讨论各种类型的会话存储)。在这种情况下,只要您的用户的会话存在,信息就会生效,并且可供您的应用程序的所有页面使用。用户不会直接修改这些值,尽管会话劫持是您可能想要探索的风险。但缺点是,在这种情况下,您使用的是宝贵的服务器资源 - 如果您的应用程序负载很大,将来可能会影响您的可扩展性。

  4. 正如我所说 - 您选择做的将完全取决于您的应用程序的需求和要求。

答案 1 :(得分:1)

几种方式(虽然不是详尽的清单):

  • ViewState
  • 隐藏字段
  • 会话
  • 查询字符串
  • cookies

答案 2 :(得分:1)

ViewState很好。如果您将其存储在回发中,则最好使用客户端解决方案。所以,你要在某个地方添加大小 - 在ViewState或隐藏字段中。

如果您想在服务器端执行此操作,可以使用会话,但请记得尽可能清理它。

答案 3 :(得分:0)

你可以将它们存储到cookie中,这样你就可以从Javascript访问它们了。或者,您可以将一个简单的字符串数组存储到视图状态。很大程度上取决于您希望存储的信息量和数量。

答案 4 :(得分:0)

当我有这个场景时,我为我填充到Viewstate中的字段创建了一个结构。我可以在页面大小和生命周期中添加一个小结构,考虑到整个页面的控件集已经存在:)

此外,在你完成页面后它会自行清理,所以不用担心用垃圾填充你的会话。

答案 5 :(得分:0)

我同意accepted answer但我还要补充一点,如果您只想跟踪一个简单的键/值集合,那么最好将通用词典放入ViewState或Session:

Dictionary<int, string> myValues = new Dictionary<int, string>();
myValues.Add(1, "Apple");
maValues.Add(2, "Pear");