Asp.net mvc 2 ASP.NETMVC-将对象从控制器发送到视图到控制器

Asp.net mvc 2 ASP.NETMVC-将对象从控制器发送到视图到控制器,asp.net-mvc-2,view,controller,session,session-state,Asp.net Mvc 2,View,Controller,Session,Session State,我刚开始学习ASP.NETMVC2,可能有点做错了。我有一个控制器,它构建一些对象并使用ViewData将它们传递给视图。在视图中,我显示数据等。。。然后希望将相同的数据(加上其他用户输入)提交回同一控制器。有什么简单的方法可以做到这一点吗 如有必要,我将提供问题的更详细描述 谢谢,再见:) 编辑: 我读了更多关于ViewModels的文章,担心我没有正确使用它们,但显然它们不是解决方案。我的问题不是将数据获取到视图(我已经为此使用了视图模型),而是将数据返回到控制器。我使用复杂的对象,所以即使

我刚开始学习ASP.NETMVC2,可能有点做错了。我有一个控制器,它构建一些对象并使用ViewData将它们传递给视图。在视图中,我显示数据等。。。然后希望将相同的数据(加上其他用户输入)提交回同一控制器。有什么简单的方法可以做到这一点吗

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

谢谢,再见:)

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

编辑2: 好的,我使用会话解决了这个问题,非常简单:)

我有一个控制器,负责构建一些 对象并将其传递给视图 使用ViewData

错误:定义视图模型类并将视图强类型化为此模型,而不是使用
ViewData

视图呈现后,您将拥有一个表单,您应该将需要返回的所有内容都放在此表单中:用户将操作的可见输入字段和包含您希望在发布到的操作中获得的任何上下文的隐藏字段

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

我有一个控制器,负责构建一些 对象并将其传递给视图 使用ViewData

错误:定义视图模型类并将视图强类型化为此模型,而不是使用
ViewData

视图呈现后,您将拥有一个表单,您应该将需要返回的所有内容都放在此表单中:用户将操作的可见输入字段和包含您希望在发布到的操作中获得的任何上下文的隐藏字段


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

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

  • 将该数据保存在会话、缓存或cookie中。选择将取决于数据是什么、用户之间的数据变量以及数据的复杂程度
  • 将这些项写入隐藏的输入<代码>Html.Hidden(“foo”,myData)

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


我更喜欢整个课程。没有篡改,你可以持有复杂的物体。显然,会话的缺点是将来扩展性能、超时以及多个会话的并发性。但是,其中一些问题可以很容易地缓解。

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

  • 将该数据保存在会话、缓存或cookie中。选择将取决于数据是什么、用户之间的数据变量以及数据的复杂程度
  • 将这些项写入隐藏的输入<代码>Html.Hidden(“foo”,myData)

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


我更喜欢整个课程。没有篡改,你可以持有复杂的物体。显然,会话的缺点是将来扩展性能、超时以及多个会话的并发性。不过,其中一些问题很容易缓解。

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

e、 g


这样,您就可以使用整个链类型save,并且可以在post back上接收整个模型作为参数。

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

e、 g


这样,您就可以使用整个链的typesave,并且您可以在邮件背面接收整个模型作为参数。

实际上,我使用的是视图模型,但我认为它们与我的问题无关(仍然认为它们是)。我已经尝试使用隐藏输入来解决问题,但它们似乎没有正确地传递对象。我觉得我做错了什么事(也许这是一天的结束),但当我把我的对象放在隐藏字段中时,只传递类名(作为字符串)。隐藏字段只对简单类型(如int和string)起作用。对于复杂类型,您需要序列化或降级到简单属性。实际上,我使用的是视图模型,但我认为它们与我的问题无关(仍然认为是)。我已经尝试使用隐藏输入来解决问题,但它们似乎没有正确地传递对象。我觉得我做错了什么事(也许这是一天的结束),但当我把我的对象放在隐藏字段中时,只传递类名(作为字符串)。隐藏字段只对简单类型(如int和string)起作用。对于复杂的类型,您需要序列化或下拉到简单的属性。我将考虑使用会话,谢谢:)对于隐藏的输入,它们可以使用一些不能实现ToSTrEnter()的方法吗?我会考虑使用会话,谢谢:)对于隐藏的输入,他们能处理一些没有实现ToString()方法的东西吗?哦,这很有趣,我想我不太了解视图模型是如何工作的,并且没有正确地使用它们。谢谢,这可能会解决我的问题。哦,这很有趣,我想我没有真正理解视图模型是如何工作的,也没有正确地使用它们。谢谢,这可能会解决我的问题。