mvc3多步形式(向导)

时间:2012-04-11 16:44:16

标签: asp.net-mvc-3 forms razor wizard

是否可以在mvc3中使用多步骤表单(向导)? 使其简单:修改产品的2个步骤形式。

可能的解决方案:使用相同的viewbag.Product以不同的形式(从一个传递到另一个)。

感谢。

1 个答案:

答案 0 :(得分:1)

向导只是处理简单模型的简单步骤。没有理由为向导创建多个模型。您所要做的就是创建一个模型并在单个控制器中的操作之间传递它。

public class MyModel
{
     [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
     public Guid Id { get; set };
     public string StepOneData { get; set; }
     public string StepTwoData { get; set; }
}

上面的男女同校是愚蠢的,所以在那里替换你的领域。接下来,我们从启动向导的简单操作开始。

    public ActionResult WizardStep1()
    {
        return View(new MyModel());
    }

这会调用视图“WizardStep1.cshtml(如果使用razor)。如果需要,可以使用创建模板向导。我们只是将帖子重定向到其他操作。

<WizardStep1.cshtml>
@using (Html.BeginForm("WizardStep2", "MyWizard")) {

值得注意的是,我们将把这个发布到另一个动作; WizardStep2动作

    [HttpPost]
    public ActionResult WizardStep2(MyModel myModel)
    {
        return ModelState.IsValid ? View(myModel) : View("WizardStep1", myModel);
    }

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

    [HttpPost]
    public ActionResult WizardStep3(MyModel myModel)
    {
        foreach (var error in ModelState["StepTwoData"].Errors)
        {
            ModelState["StepTwoData"].Errors.Remove(error);
        }

最后,我们将模型保存一次到数据存储。这也可以防止启动向导但未完成向导的用户不将不完整的数据保存到数据库。

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

感谢阅读。