MVC3表格保存前预览

时间:2014-02-11 15:07:18

标签: asp.net-mvc asp.net-mvc-3

我目前正在开发一个关于MVC3的应用程序,并且:

  1. 我有一个表格,用户正在填写表格 注册
  2. 当他点击一个按钮时,记录将传递给控制器 并存储在列表中,然后再次传递给视图以显示 预览“缓冲区”中的情节
  3. 使用hiddenfor
  4. 在多个步骤中保存未编辑且仅显示(先前的寄存器)以避免其消失的数据
  5. 最后,用户可以在点击另一个按钮
  6. 时保存数据库中列表中的所有元素

    我的问题是:有没有办法保存列表中的数据而不必为每一步中的每个元素隐藏?

2 个答案:

答案 0 :(得分:0)

为列表创建会话变量。

Session["MyList"] = myList;

稍后你会像这样“恢复”你的列表:

var myList = Session["MyList"] as List<MyType>;

如果您添加了一些代码,我可以根据您的具体情况进行调整。

答案 1 :(得分:0)

我认为您可以使用向导技术来执行此操作。首先,您需要找到一个向导插件。 例如jQuery steps。 每个步骤都有一个你需要的表格,你有两个选择: 使用Session这样:

   public YourObject GetObjectfromSession()
            {
                var obj = new YourObject();
                if (HttpContext.Session["SessionName"] != null)
                {
                    obj= (VmSysMealCreate)HttpContext.Session["SessionName"];
                }
                return obj;
            }

            public void InsertObjectTOSession(YourObject obj)
            {
                HttpContext.Session.Add("SessionName", obj);
            }

在每个步骤更改时,您可以验证表单并将其提交到控制器中的方法,您将其保存到数据库而不是会话。在最后一步,您可以为所有表单进行汇总。     这是一个很好的解决方案,这将很容易实现,并且工作得很好。但是使用这个解决方案,您需要考虑会话需要多长时间来保存数据,因为会话将受到限制。

您可以做的第二件事:     使用向导插件,在最后一步,您可以获得所有表单,对于每个表单,您可以执行以下操作:

function functionNAme(formId) {

    var form = jQuery("#" + formId);
 if (form.valid()) { //If form is valid
        form.submit();
        return isValid;
    }
    var isValid = false;

    form.submit(function (e) {
        var that = this;
        jQuery.ajax({
            url: this.action,
            type: this.method,
            data: jQuery(this).serialize(),
            async: false,
            /* cache: false,*/
            success: function (result) {
               //on post method return result (summary view ofr each form )
              //and you can append it to your last step
                }
                return false;
            }
        });
        // unbind form submit event
        form.unbind(e);
        // preventing default
        e.preventDefault();
        // cancel the default submission of the form
        return false;
    });   
}

第二种解决方案很好,但实施起来并不那么简单 希望这会锄你,你会做出正确的决定。如果你找到其他解决方案,请提供给我们。