跨回发存储字符串数据的最佳方法是什么。我需要存储多个实体的ID和名称。我想在viewstate中使用数据表,但这会使viewstate变得过大吗?我还不能使用数据库,因为我将插入一条记录,其他记录需要与之相关。所以我只是暂时存储它们,直到用户提交表单。
答案 0 :(得分:4)
您实际上有很多选择 - 您选择的选项完全取决于您自己的应用程序的要求。
ViewState - 您可以将数据添加到页面的viewstate中。这样做的好处是,数据将仅在页面上的用户的生命周期中存活并将其发布回服务器。它比隐藏字段的另一个优点是,用户很难入侵它并改变你的价值观(我相信,事实上,你可以加密你的观点状态)。当然,缺点在于页面大小 - 您添加到视图状态的所有内容都会被丢弃在用户页面上,然后被发布回服务器。这使得它不适合存储大量数据。
Cookie - 您可以以Cookie的形式将信息反馈给用户。在这种情况下,您可以声明信息将持续多长时间 - 对于打开浏览器的用户或特定日历时间的范围。每当用户点击该页面时,该信息将可用于您的应用程序的任何页面。坏消息是您可以存储的信息量有限,用户可以很容易地更改自己的cookie。
会话 - 您将用户的信息存储在您自己的服务器内存中(我将不讨论各种类型的会话存储)。在这种情况下,只要您的用户的会话存在,信息就会生效,并且可供您的应用程序的所有页面使用。用户不会直接修改这些值,尽管会话劫持是您可能想要探索的风险。但缺点是,在这种情况下,您使用的是宝贵的服务器资源 - 如果您的应用程序负载很大,将来可能会影响您的可扩展性。
正如我所说 - 您选择做的将完全取决于您的应用程序的需求和要求。
答案 1 :(得分:1)
几种方式(虽然不是详尽的清单):
答案 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");