将复杂对象传递给视图并将其发回

时间:2014-08-08 15:26:17

标签: c# asp.net-mvc asp.net-mvc-5

我正在研究MVC 5应用程序。

我有一个将复杂对象作为参数的动作。此操作会生成一个视图,此视图会调用另一个操作,该操作需要将此复杂对象传递给它。

传递它的麻烦方法是什么,避免将其存储在会话中(我知道,这将是最简单的事情,但项目要求之一是避免使用会话,除了安全事项)?

控制器示例:

public class TestController {
    public ActionResult Action1(ComplexObject object)
    {
        TestModel model = new TestModel
        {
            model.ComplexObject = complexObject
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Action2(TestModel model)
    {
        DoSomeStuff(model.ComplexObject);

        return View(model);
    }
}

所以问题是将这个复杂的对象存储在某个地方(同样,不在会话中),以便能够在Action2中以Action1中存在的方式检索它。我目前将它添加到模型中,但它不是强制性的,因为它未在视图中使用。

我想在视图中创建隐藏字段,但是存储来自对象的所有东西都是屁股的真正痛苦,它很难看,如果对象结构将来发生变化会引入错误。

这样做有什么好的做法吗?或者有一种优雅的方式以某种方式序列化和反序列化它?欢迎任何想法。

1 个答案:

答案 0 :(得分:0)

如果您的TestModel定义具有ComplexObject(我想它会因为您为其分配ComplexObject值),当您将该模型传递给视图时,就像您在Action1中所做的那样,您的视图将只接收它你强烈输入了你的观点:

@model = TestModel //simplified path since I do not know the full path of your model

你的Action2方法是一个HttpPost,它让我得出结论,你将有一个用户在视图上发布表单。发布表单时,强类型视图会将模型传递给Action2方法。如果您使用任何HTML帮助程序来修改TestModel的任何属性,那么这些更改也将传递给您的Action2方法。