ASP.Net MVC - 从控制器发送对象到视图到控制器

时间:2010-07-20 15:21:01

标签: asp.net-mvc-2 view controller session session-state

我刚开始使用ASP.Net MVC 2,可能会做错事。我有一个控制器,它构建一些对象并使用ViewData将它们传递给视图。在视图中我显示数据等...然后想要将相同的数据(加上其他用户输入)提交回同一个控制器。有没有简单的方法呢?

如有必要,我会提供更详细的问题说明。

谢谢,美好的一天:)

编辑: 我在ViewModels上阅读了更多关于我没有正确使用它们的信息,但显然它们不是解决方案。我的问题是没有将数据提供给视图(我已经使用了视图模型),但是将数据返回给控制器。我使用复杂的对象,所以即使发送带有隐藏字段的表单也不是一个好的解决方案,因为它需要我序列化我的对象,这对于一个应该简单的任务来说太麻烦了。我现在打算看看会议。

编辑2: 好吧,我使用会话解决了问题,不容易:)

3 个答案:

答案 0 :(得分:1)

考虑以下任何一种解决方案来保持请求之间的状态:

  • 将该数据保存在会话,缓存或Cookie中。选择取决于数据是什么,数据在用户之间的变化程度,以及数据的复杂程度。
  • 将这些项目写入隐藏的输入。 Html.Hidden("foo", myData);

如果您选择写入隐藏输入,请考虑faking ViewState。但这是一个非最佳解决方案。

我更喜欢Session整体。没有篡改,你可以容纳复杂的物体。显然,Session的缺点是未来的扩展性能,超时和多个会话的并发性。但是,其中一些问题很容易减轻。

答案 1 :(得分:0)

  

我有一个控制器来构建一些   对象并将它们传递给视图   使用ViewData

错误:定义视图模型类并使您的视图强烈输入此模型,而不是使用ViewData

一旦渲染了视图,你将拥有一个表单,你应该把你需要的所有内容放回到这个表单中:用户将操作的可见输入字段和隐藏字段,其中包含你想要获得的任何上下文您要发布的操作。

另一种选择是将此信息存储到cookie或会话中。

答案 2 :(得分:0)

查看View Model的一些示例。 应该更倾向于使用ViewData的东西。

e.g。 http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

有了这个,你就是整个连锁类型,你可以把整个模型作为一个参数发回到帖子上。