如何在保存表单之前缓存表单上的数据?

时间:2015-09-08 13:26:58

标签: c# caching

表单数据缓存有点问题(在实际保存到文件之前将其保存在变量中)。我有一个非常简单的表单布局:

  1. ObjectCombo
  2. ParamCombo1
  3. ParamCombo2
  4. ParamText1
  5. ParamCombo3
  6. SaveButton
  7. 此表单用于为程序中的特定对象配置某些参数。所有对象的列表都在ObjectCombo中。参数在其他表单字段中。每当我从ObjectCombo中选择另一个对象时,我希望缓存为该对象输入的参数,直到我配置了ObjectCombo列表中的每个对象。配置好所有内容后,我想按SaveButton,以便一次保存ObjectCombo中每个对象的每个缓存参数。

    我的解决方案是,我创建了一个带有int(ObjectCombo中对象的索引)作为键的Dictionary和另一个带有参数name作为键和参数值作为值的字典。
       Dictionary<int, Dictionary<string, string>>

    我将在ObjectCombo SelectedIndexChanged事件中进行缓存,因此当我配置了最后一个元素并单击Save时,最后一个元素不会被保存,因为没有触发SelectedIndexChanged事件。当然,我可以回到ObjectCombo中的另一个对象,这将解决问题,但这不是用户友好的。我可以订阅一个不同的事件,让我在移动到另一个对象之前缓存配置数据吗?

    我对这一挑战的态度是否合理?我已经把这个问题搞砸了一天,我所做的一切听起来都很简单,但由于英语不是我的母语,我可能会有一个问题表达自己。如果有兴趣帮助的人在理解我想要实现的目标时遇到问题,请不要犹豫,询问更多信息。

2 个答案:

答案 0 :(得分:0)

我想最好的方法是将您的数据保存在隐藏字段<asp:HiddenField runat="server"/>中,您应该创建一些javascript处理程序来填充此隐藏字段。 如果您发布项目代码也会更好,然后我可以提供一些实现变体。

答案 1 :(得分:0)

最佳方法是创建每个对象的克隆并将克隆添加到组合框中。让用户一次更新所有克隆对象。您可以将事件连接到每个参数控件,例如ParamText1的TextChanged。然后,当事件触发时,您将更新ObjectCombo的所选项目(您将需要对您的实际类型进行类型转换,因为表观类型将是对象)。 ObjectCombo的SelectedIndexChanged事件应该只负责在用户选择其他对象时填充其他控件。每个param控件的事件将负责更新所选对象。确保在更新控件时取消订阅SelectedIndexChanged中的参数控制事件,否则这些事件将被意外触发。

用户更新了所有(克隆的)对象并按“保存”。只需将所有克隆数据(也称为缓存)复制到原始数据。

这背后的想法是你“缓存”克隆对象中的用户更改,然后,一旦保存,你将把缓存的数据复制到实际的对象。