0

I'm using asp.net MVC 3:

I have a view whose input fields are generated dynamically during the GET request (they are retrieved from the database). During the POST, if the validation fails, I have to redisplay the fields and therefore retrieve them again. Is there a way to avoid the redundant database access, i.e, is there a way to share some data between GET and POST requests?

4

3 回答 3

1

有一些方法可以处理这个问题,比如将数据存储在 TempData 或 Session 等中......但我认为你不应该那样做。您应该始终重新查询您的数据访问层并获取它。这并不意味着您总是查询数据库表。您的数据访问层可以为您提供缓存中的数据或对表进行查询。

在幕后,TempData 使用 Session 来持久化这些值。TempData 的值会一直存在,直到它被读取或会话超时。以这种方式持久化 TempData 可以实现重定向等场景,因为 TempData 中的值在单个请求之外可用。

于 2012-05-08T12:24:38.237 回答
0

我认为您想要的是“延迟加载”。

创建一个static变量(在执行数据库查询的类中),它将在数据库查询发生时存储数据库查询的结果,但最初它应该是null. 然后创建一个 getter 方法来检查这个static变量是否null存在。如果是null,则运行数据库查询并存储结果,否则只返回staticvar 的内容。然后总是使用那个吸气剂,你就准备好了。

我知道特别迂腐的人对使用这样的static变量感到畏缩......但它运作良好,而且很少大惊小怪。

于 2012-05-08T12:32:42.490 回答
0

不是直接的,但是是的。

如果您在发布表单时将所有数据发送回服务器,然后将这些数据发送到模型,那么您的模型将拥有填充其字段所需的所有数据。

通过 ajax 发布以接收 json 数据,当您从 ajax 检索结果时,您只填充已更改的字段。

但是,我认为重新查询没什么大不了的,除非您正在谈论几秒钟或更长时间的特别痛苦的查询。

哦,不要将数据存储在会话或缓存中。没有理由用单个帖子堵塞 ram,如果您错误地重用会话密钥,这可能会在以后引发潜在问题。

于 2012-05-08T12:26:25.630 回答