Asp.net mvc 3 任何示例MVC3向导应用程序(多步骤)(无JQUERY)

Asp.net mvc 3 任何示例MVC3向导应用程序(多步骤)(无JQUERY),asp.net-mvc-3,wizard,Asp.net Mvc 3,Wizard,我一直在Google Plex上进行高/低搜索,这里是一个示例MVC3向导(多步骤),它不支持MVC3(和jQuery)的clientsidevalidation元素。我在这里至少看到了一些元素的一个详细解释:,但我无法让它正常工作 作为MVC3和一般编程的新手,我怀疑是我的经验水平阻碍了我实现这一目标 无论如何,对非jQueryMVC3向导示例的任何指导都是非常好的。提前谢谢。如果不允许使用jQuery/javascript,我会这样做 为向导创建一个控制器 创建包含向导将设置的所有字段的模型

我一直在Google Plex上进行高/低搜索,这里是一个示例MVC3向导(多步骤),它不支持MVC3(和jQuery)的clientsidevalidation元素。我在这里至少看到了一些元素的一个详细解释:,但我无法让它正常工作

作为MVC3和一般编程的新手,我怀疑是我的经验水平阻碍了我实现这一目标


无论如何,对非jQueryMVC3向导示例的任何指导都是非常好的。提前谢谢。

如果不允许使用jQuery/javascript,我会这样做

  • 为向导创建一个控制器
  • 创建包含向导将设置的所有字段的模型
  • 每个向导页面创建一个操作,所有操作都应使用相同的模型
  • 创建将所有内容保存到数据库的最终操作

  • 如果不允许使用jQuery/javascript,我会这样做

  • 为向导创建一个控制器
  • 创建包含向导将设置的所有字段的模型
  • 每个向导页面创建一个操作,所有操作都应使用相同的模型
  • 创建将所有内容保存到数据库的最终操作

  • 乔纳斯是绝对正确的。下面是进一步的细分

    public class MyModel
    {
         [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
         public Guid Id { get; set };
         public string StepOneData { get; set; }
         public string StepTwoData { get; set; }
    }
    
    上面的coed很简单,所以在那里替换你的字段。接下来,我们从启动向导的简单操作开始

        public ActionResult WizardStep1()
        {
            return View(new MyModel());
        }
    
    这将调用视图“WizardStep1.cshtml(如果使用razor的话)。如果需要,您可以使用创建模板向导。我们只是将文章重定向到其他操作

    <WizardStep1.cshtml>
    @using (Html.BeginForm("WizardStep2", "MyWizard")) {
    
    在此操作中,我们检查模型是否有效,如果有效,我们将其发送到WizardStep2.cshtml视图,否则我们将其发送回第一步,并显示验证错误。在每一步中,我们将其发送到下一步,验证该步骤并继续。现在,一些精明的开发人员可能会说,如果我们使用[Required],我们无法在这样的步骤之间移动步骤之间的属性或其他数据注释。您是对的,因此请删除尚未检查的项目上的错误。如下所示

        [HttpPost]
        public ActionResult WizardStep3(MyModel myModel)
        {
            foreach (var error in ModelState["StepTwoData"].Errors)
            {
                ModelState["StepTwoData"].Errors.Remove(error);
            }
    
    最后,我们将模型保存一次到数据存储中。这还可以防止启动向导但未完成向导的用户不将不完整的数据保存到数据库中

    我希望您发现这种实现向导的方法比前面提到的任何方法都更易于使用和维护


    谢谢阅读。

    乔纳斯完全正确。下面是进一步的细分

    public class MyModel
    {
         [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
         public Guid Id { get; set };
         public string StepOneData { get; set; }
         public string StepTwoData { get; set; }
    }
    
    上面的coed很简单,所以请替换其中的字段。接下来,我们从启动向导的简单操作开始

        public ActionResult WizardStep1()
        {
            return View(new MyModel());
        }
    
    这将调用视图“WizardStep1.cshtml”(如果使用的是razor)。如果需要,可以使用创建模板向导。我们只是将帖子重定向到另一个操作

    <WizardStep1.cshtml>
    @using (Html.BeginForm("WizardStep2", "MyWizard")) {
    
    在此操作中,我们检查模型是否有效,如果有效,我们将其发送到WizardStep2.cshtml视图,否则我们将其发送回第一步,并显示验证错误。在每一步中,我们都将其发送到下一步,验证该步骤并继续。现在,一些精明的开发人员可能会说,如果我们在步骤之间使用[必需的]属性或其他数据注释,我们就不能在这样的步骤之间移动。您是对的,因此请删除尚未检查的项目上的错误。如下图所示

        [HttpPost]
        public ActionResult WizardStep3(MyModel myModel)
        {
            foreach (var error in ModelState["StepTwoData"].Errors)
            {
                ModelState["StepTwoData"].Errors.Remove(error);
            }
    
    最后,我们将模型保存一次到数据存储。这还可以防止启动向导但未完成向导的用户不将不完整的数据保存到数据库中

    我希望您发现这种实现向导的方法比前面提到的任何方法都更易于使用和维护


    感谢阅读。

    您能详细说明“无jQuery”要求吗?允许使用JavaScript吗?允许使用JavaScript库或框架吗?@David感谢您的快速响应。我正在使用OrchardCMSV1.3,客户端验证目前在这种情况下不可行。此外,我正在使用一些动态元素,我的理解是,在这种情况下ClientSideValidation不能很好地工作(请参阅);不过,考虑到我的第一个局限性,这里的解决方案并没有什么帮助。注意:网站上的精心设计的解决方案有一条评论,认为坚持这么多信息的9个“步骤”并不合理。出于我的目的,这也可能是一个问题,因为我已经将表单分为至少7个步骤(尽管最后一个步骤是确认)。您能详细说明“无jQuery”要求吗?允许使用JavaScript吗?允许使用JavaScript库或框架吗?@David感谢您的快速响应。我正在使用OrchardCMSV1.3,客户端验证目前在这种情况下不可行。此外,我正在使用一些动态元素,我的理解是,在这种情况下ClientSideValidation不能很好地工作(请参阅);不过,考虑到我的第一个局限性,这里的解决方案并没有什么帮助。注意:网站上的精心设计的解决方案有一条评论,认为坚持这么多信息的9个“步骤”并不合理。出于我的目的,这也可能是一个问题,因为我已经将表单分为至少7个步骤(虽然最后一个步骤是确认)。如果向导不是简单的下一个、下一个、下一个,而是有逻辑根据上一个视图的答案决定下一个要显示的视图,我们将如何处理这种情况?感谢您提供完整的样品@SamDelaney,您可以尝试在控制器中执行一些if/else逻辑(如果步骤1上的单选按钮1为yes,则执行此操作,否则执行此操作)。如果向导不是简单的next、next、next,而是具有根据上一个视图的答案决定下一个视图显示的逻辑,我们将如何处理这种情况?感谢您提供完整的样品@SamDelaney,您可以尝试在控制器中执行一些if/else逻辑(如果步骤1上的单选按钮1为yes,则执行此操作,否则执行此操作)。在我看来,这似乎不起作用,因为您在执行操作时不会在操作中使用所有数据