我正在研究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中存在的方式检索它。我目前将它添加到模型中,但它不是强制性的,因为它未在视图中使用。
我想在视图中创建隐藏字段,但是存储来自对象的所有东西都是屁股的真正痛苦,它很难看,如果对象结构将来发生变化会引入错误。
这样做有什么好的做法吗?或者有一种优雅的方式以某种方式序列化和反序列化它?欢迎任何想法。
答案 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方法。