我正在使用asp.net MVC 3:
我有一个视图,其输入字段是在GET请求期间动态生成的(它们是从数据库中检索的)。在POST期间,如果验证失败,我必须重新显示字段,然后再次检索它们。有没有办法避免冗余数据库访问,即有没有办法在GET和POST请求之间共享一些数据?
答案 0 :(得分:1)
有办法处理这个问题,比如在TempData或Session等中存储数据......但我认为你不应该这样做。您应该始终重新查询数据访问层并获取它。这并不意味着您总是查询db表。您的数据访问层可以为缓存中的数据提供数据,也可以对表进行查询。
幕后,TempData使用Session来保存值。 TempData的值一直存在,直到读取或会话超时为止。以这种方式保持TempData可以启用重定向等方案,因为TempData中的值可以在单个请求之外使用。
答案 1 :(得分:0)
不是直接,但是是。
如果您发布表单时,您将所有数据发送回服务器,然后将数据发送到模型,您的模型将拥有填充其字段所需的所有数据。
通过ajax发布以接收json数据,以及从ajax检索结果时 您只填充已更改的字段。
但是,我不认为重新查询是一个很大的交易,除非你谈论几秒或更长时间的特别痛苦的查询。
哦,不要将数据存储在会话或缓存中。没有理由用单个帖子阻塞ram,如果你错误地重用会话密钥,这可能会在以后打开潜在的问题。
答案 2 :(得分:0)
我认为你想要的是'懒加载'。
创建一个static
变量(在执行数据库查询的类中),它将在数据库查询发生时存储结果,但最初应该是null
。然后创建一个getter方法,检查此static
变量是否为null
。如果是null
,则运行数据库查询并存储结果,否则只返回static
var的内容。然后总是使用那个吸气剂,你就定了。
我知道特别迂腐的人对使用这样的static
变量感到畏惧......但它运作良好,并且没什么大惊小怪的。