【问题标题】:MVC3 Form with Preview before save保存前带有预览的 MVC3 表单
【发布时间】:2014-02-12 18:02:58
【问题描述】:

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

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

我的问题是:有没有一种方法可以保留列表中的数据,而不必为每个步骤中的每个元素都设置一个 hiddenfor?

【问题讨论】:

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


    【解决方案1】:

    为您的列表创建一个会话变量。

    Session["MyList"] = myList;
    

    稍后您可以像这样“恢复”您的列表:

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

    如果您添加一些代码,我可以对其进行调整以适合您的具体情况。

    【讨论】:

    • 我要去google一下会话,以免在使用你给我的代码时打扰你,如果我有疑问我会问你。
    【解决方案2】:

    我认为你可以使用向导技术来做到这一点。所以首先你需要找到一个向导插件。 例如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;
        });   
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      相关资源
      最近更新 更多