Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 ASP MVC3设计模式,用于持久化视图中的项集合,同时从另一个视图向其中添加新项_Asp.net Mvc 3_Entity Framework_Design Patterns - Fatal编程技术网

Asp.net mvc 3 ASP MVC3设计模式,用于持久化视图中的项集合,同时从另一个视图向其中添加新项

Asp.net mvc 3 ASP MVC3设计模式,用于持久化视图中的项集合,同时从另一个视图向其中添加新项,asp.net-mvc-3,entity-framework,design-patterns,Asp.net Mvc 3,Entity Framework,Design Patterns,当在“ListItem”视图中显示的现有项集合需要添加一个新项,并在另一个“NewItem”视图中输入时,是否有一个好的设计模式来解决应用程序场景 例如,带有EF4.1 Code First的ASP.NET MVC3应用程序管理一个产品列表,每个产品包含一个零件列表。EF模型包括一个具有多个基本类型属性的产品对象和一组零件对象 用户可以将新产品添加到列表中,打开NewProductView并输入常规产品信息,然后输入此新产品的零件集合。零件信息收集在另一个NewPart视图中,需要包括在新产品的

当在“ListItem”视图中显示的现有项集合需要添加一个新项,并在另一个“NewItem”视图中输入时,是否有一个好的设计模式来解决应用程序场景

例如,带有EF4.1 Code First的ASP.NET MVC3应用程序管理一个产品列表,每个产品包含一个零件列表。EF模型包括一个具有多个基本类型属性的产品对象和一组零件对象

用户可以将新产品添加到列表中,打开NewProductView并输入常规产品信息,然后输入此新产品的零件集合。零件信息收集在另一个NewPart视图中,需要包括在新产品的现有零件集合中。主要的挑战是,在NewProduct视图和NewPart视图之间来回切换时,保持此零件临时集合的最佳实践是什么


一个选项是将新零件记录立即保存到数据库中,但父产品对象尚未生成,需要多次数据库调用。理想情况下,完整的新产品对象及其零件集合应该保存在一个调用中。另一种选择是将会话用于临时零件收集存储,但我确信这是否是一种好方法。目前,我对设计模式感兴趣,它不使用Ajax或其他客户端站点技术,只是从视图中标准地获取/发布到服务器。

理想情况下,完整的新产品对象及其部分集合应该保存在一次调用中。就我个人而言,我会用ajax实现这一点,当与Steve Sanderson和jquery UI对话框结合使用时,这是完全可能的,也不困难。但是,要在不使用ajax的情况下实现这一点,可以执行以下操作:

用户从产品表单开始。在产品表单上,有一个空的当前零件列表以及一个新零件按钮

当用户单击NewPart按钮时,向action方法提交一个完整的回发,这样NewPart按钮就像这样

action方法检查请求以确定单击了哪个按钮。如果单击了“新建零件”按钮,操作方法将返回零件表单视图

但是,零件表单视图应该为可能已输入到产品表单中的所有标量字段提供隐藏字段。此外,它还有一个提交按钮,如下所示:

提交零件表单时,操作方法将返回产品表单视图。但是,当前零件列表现在包含添加的零件,以及在上一个零件表单中输入的该零件所有标量的隐藏字段。有关在MVC2+中通过HTTP POST提交项目列表的更多信息,请参阅和

这本质上就是viewstate在webforms中所做的,以跨多个用户单击来维护状态。在幕后,来自先前表单提交的所有数据都通过一系列回发进行传输,而不使用会话或持久存储。在MVC中,由于没有viewstate,您必须更加明确地写出另一个表单的隐藏字段,以便通过一系列回发将它们从一个表单视图传递到另一个表单视图

然而,一旦您的产品表单获得更多集合属性,这可能会很快失控

您可以做的另一件事是强制用户进入渐进式披露/向导式的工作流程,以创建产品和零件。您可以要求用户首先输入所有必需的产品信息。然后,当该产品保存后,将它们推到另一个屏幕,循环向该产品添加新零件。这将使您摆脱相互依赖的主体视图和相互依赖的表单视图的混乱状态,这些视图将数据推送到彼此之间