替代重新加载模型数据

时间:2009-08-27 11:53:13

标签: asp.net-mvc

我有一个控制器视图,其中列出了最近的评论。我还有一个文本框和按钮来添加新评论。 当我发布到保存操作时,我需要验证文本框。 但是,如果验证失败,当返回到视图时,我还需要重新加载所有注释,这感觉就像一个不必要的数据库调用。

实施例: 我的Action包含一个名为comment的参数。 如果评论无效(空白或包含亵渎) 创建一个新的ViewModel。 从db加载以前的注释。 向ViewModel添加注释 注释的AddModelError。 返回视图(模型)。

是否无法保留最初加载的注释,以防止再次命中数据库?

3 个答案:

答案 0 :(得分:2)

您可以通过多种方式保留评论,但在这种情况下,db调用可能不是一个选项。但要回答我认为你问题的根源,就是没有“内置”方式可以神奇地保留原始评论。

这不是Web窗体,所以你不会在ViewState中拥有所有的评论(好!),这就是Web Forms在回发后神奇地保留了大量数据的方式。对您的保存操作的POST和生成的视图的呈现与您最近的评论页面的GET没有根本的区别 - 如果在评论页面上查询数据库是正常的,那么在我的保存中应该没问题。意见。

话虽如此,仍有改进的空间, AJAX 可能是您最好的选择之一。使用jQuery或MS Ajax(Ajax.BeginForm()),您可以调用save方法来执行其操作,只返回新保存的注释,并将其附加到页面上的注释中。您不仅保存了数据库调用,还改善了用户体验!

答案 1 :(得分:0)

当然,这里最大的候选者是使用Cache,并且可能在那里使用依赖关系,以便该特定信息集的缓存只有在修改它们的数据库表时才会失效。您也可以添加时间到期以提高效率。

Andrtew

答案 2 :(得分:0)

也许您可以使用“TempData”将结果传递给下一个控制器请求..当您知道下一个请求将会是什么时,这通常很有效?