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

问题描述 投票:0回答:3

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

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

谢谢,美好的一天:)

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

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

asp.net-mvc-2 view controller session session-state
3个回答
1
投票

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

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

如果您选择写入隐藏输入,请考虑伪造 ViewState。但这不是最佳解决方案。

总体来说我更喜欢Session。不会被篡改,并且您可以握住复杂的物体。显然,Session 的缺点是未来的扩展性能、超时和多个会话的并发性。不过,其中一些问题很容易得到缓解。


0
投票

我有一个控制器,可以构建一些 对象并将它们传递给视图 使用视图数据

错误:定义一个视图模型类并使您的视图强类型化到该模型,而不是使用

ViewData

渲染视图后,您将拥有一个表单,您应该将需要返回的所有内容放入此表单中:用户将操作的可见输入字段和包含您想要在操作中获取的任何上下文的隐藏字段正在张贴到。

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


0
投票

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

例如链接

这样,您就处于整个链类型保存中,并且您可以在回发时接收整个模型作为参数。

© www.soinside.com 2019 - 2024. All rights reserved.