Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Design patterns MVC向导应用程序的模式_Design Patterns_Asp.net Mvc 4 - Fatal编程技术网

Design patterns MVC向导应用程序的模式

Design patterns MVC向导应用程序的模式,design-patterns,asp.net-mvc-4,Design Patterns,Asp.net Mvc 4,在ASP.NET MVC应用程序中,我正在创建一个向导,用于逐步收集由每个屏幕/视图/页面中的许多不同字段组成的信息 我打算在后台异步保存信息 模式建议是什么: 1.基于向导的序列本身 2.信息的增量保存 在ASP.NET MVC中,是否有针对此类典型向导式应用程序的推荐/模板?我是一个Java爱好者,但我想与大家分享我最近使用的向导式流程的一种方法,这种方法可能很有用 首先,流程中的某些页面仅适用于其他页面的输入,整个流程严重依赖于可能发生变化的后端数据(例如,用户启动流程,将其保存为草稿并返

在ASP.NET MVC应用程序中,我正在创建一个向导,用于逐步收集由每个屏幕/视图/页面中的许多不同字段组成的信息

我打算在后台异步保存信息

模式建议是什么:

1.基于向导的序列本身

2.信息的增量保存


在ASP.NET MVC中,是否有针对此类典型向导式应用程序的推荐/模板?

我是一个Java爱好者,但我想与大家分享我最近使用的向导式流程的一种方法,这种方法可能很有用

首先,流程中的某些页面仅适用于其他页面的输入,整个流程严重依赖于可能发生变化的后端数据(例如,用户启动流程,将其保存为草稿并返回到草稿,但现在后端数据发生了变化,因此现在需要一些以前不需要的用户输入)

为了处理所有这些问题,我将后端代码与页面流分离——后端代码(也称为服务层)不知道用户在哪个页面上,不知道在哪个页面上有哪些字段,也不知道将用户发送到下一个页面的线索。它所做的只是通过向导验证用户正在填充的数据结构的完整性(不管用户是否已经访问了部分数据结构)。验证失败的每个数据元素都附加了一个错误。前端代码(即控制器层)只是查找这些错误并确定页面序列中的第一个页面,该页面可以解决任何错误,并将用户发送到该页面。如果用户刚刚发布了该页面(并且服务层向该页面上由字段表示的数据元素添加了错误),则会显示一条错误消息(当然,我们只想向用户显示他们已经看到的字段的错误,如果在向导中第一次访问的页面上向他们显示他们第一次看到的字段的错误,那就有点粗鲁了)

这种方法的缺点是服务层正在运行甚至不适用的验证(因为它不知道用户在流程中的位置)但它有一个巨大的优势——字段可以在页面之间移动,页面可以重新排序,你可以说,服务层不必被触及。唯一需要改变的是控制器层中错误之间的映射以及使用哪些页面来解决错误

在经历了对该向导进行重大更改的项目的多个版本后,该设计具有难以置信的弹性(对不起,我有点自豪)

关于你问题的另一部分,我没有任何建议,因为我从来没有在大范围内这样做过,但我相信你知道,当字段失去焦点(或者根据控件进行单击)时,你只想使用AJAX将字段值发送到服务器并更新您的模型。如果我要将其与我的设计相适应,我将只执行域验证(例如,它是否可以作为日期进行分析),并将其写入db,而不经过服务层验证,然后只有当它们点击“继续”时,我才运行服务层验证(此时他们可能会看到以下错误:“您输入的日期必须早于今天”)。我有一个类似的要求-他们可以随时保存他们的工作,只要我可以将他们的数据写入数据库(我不能将“abc”存储到日期字段),这很好,但当他们重新加载保存的数据并尝试继续通过向导时,业务逻辑验证将捕获任何错误。

可能重复的