为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NETMVC中的多步骤注册过程问题(拆分视图模型,单个模型)

ASP.NETMVC中的多步骤注册过程问题(拆分视图模型,单个模型)

www说 2019-07-13 18:47:03
我有一个多步注册过程,由一个域层中的单个对象,它们具有在属性上定义的验证规则。当域被分割到多个视图时,我应该如何验证域对象,并且在发布时必须在第一个视图中部分保存该对象?我考虑过使用会话,但这是不可能的,因为这个过程很长,数据量很大,所以我不想使用会话。我考虑将所有数据保存在内存中的关系数据库中(使用与主db相同的模式),然后将数据刷新到主db,但是出现了一些问题,因为我应该在使用主db和内存中数据库的服务(视图中请求)之间路由。我正在寻找一个优雅而干净的解决方案(更准确地说是一个最佳实践)。更新和澄清:达林,谢谢你周到的回答,这正是我到现在为止所做的。但顺便提一句,我有一个包含很多附件的请求,我设计了一个Step2View例如,哪个用户可以异步地上传文档,但是这些附件应该保存在一个表中,该表与之前应该保存的另一个表具有引用关系。Step1View.因此,我应该将域对象保存在Step1(部分),但我不能,因为部分映射到步骤1的视图模型的支持核心域对象无法保存,没有转换的道具Step2ViewModel.
查看完整描述

3 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

我建议您使用jQuery在客户机上维护完整流程的状态。

例如,我们有一个三步向导进程。

  1. 提供了步骤1的用户有一个标记为“Next”的按钮。
  2. 在单击Next时,我们发出一个Ajax请求,并创建一个名为Step 2的DIV,并将HTML加载到该DIV中。
  3. 在步骤3中,我们在点击按钮时有一个标记为“已完成”的按钮,使用$.post Call发布数据。

通过这种方式,您可以轻松地从表单POST数据构建域对象,如果数据有错误,返回有效的JSON,保存所有错误消息并在div中显示它们。

请把台阶分开

public class Wizard {
  public Step1 Step1 {get;set;}
  public Step2 Step2 {get;set;}
  public Step3 Step3 {get;set;}}public ActionResult Step1(Step1 step){
  if(Model.IsValid)
 {
   Wizard wiz = new Wizard();
   wiz.Step1 = step;
  //Store the Wizard in Session;
  //Return the action
 }}public ActionResult Step2(Step2 step){
 if(Model.IsValid)
 {
   //Pull the Wizard From Session
   wiz.Step2=step;
 }}

以上只是一个帮助你达到最终结果的演示。在最后一步中,您必须创建域对象并从Wizard对象中填充正确的值并将其存储到数据库中。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 445 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信