2010-07-20 112 views
1

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

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

感谢和美好的一天:)

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

编辑2: 好吧,我解决了使用会话的问题,再简单不过了:)

回答

1

考虑这些解决方案,以保持请求之间的状态:

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

如果您选择写入隐藏输入,请考虑faking ViewState。尽管如此,这是一个非优化的解决方案。

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

+0

我会考虑使用会议,谢谢:) 至于隐藏的输入,他们可以使用不执行ToString()方法的东西吗? – DrunkenBeard 2010-07-20 15:33:04

0

我有一个控制器谁建立了一些 对象,并将其传递到使用ViewData的视图

错误:定义一个视图模型类,并使您的视图被强制输入到此模型中,而不是使用ViewData

一旦呈现视图,您将拥有一个表单,并且您应该将所需的所有内容返回到此表单中:用户将操作的可见输入字段以及将包含您希望获取的任何上下文的隐藏字段您要发布的操作。

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

+0

其实我使用视图模型,但我认为它们与我的问题无关(仍然认为它们是)。我已经试图使用隐藏的输入来解决问题,但他们似乎并没有正确传递我的对象。我觉得我正在做一些非常错误的事情(也许这是一天的结束),但是当我把对象放在隐藏的字段中时,只有类名被传递(作为字符串)。 – DrunkenBeard 2010-07-20 15:30:59

+0

隐藏字段仅适用于简单类型,例如整数和字符串。对于复杂类型,您需要序列化或下降到简单属性。 – 2010-07-20 15:46:33

0

查看视图模型的一些示例。 这应该是有利于使用ViewData的东西。

例如http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

与此相关的是,您在整个链类型保存中,并且您可以在整个回发过程中接收整个模型作为参数。

+0

哦,这很有趣,我认为我并不真正了解视图模型是如何工作的,并且没有以正确的方式使用它们。谢谢,这可能会解决我的问题。 – DrunkenBeard 2010-07-20 15:35:37