关于我的问题,我在这里看到过类似的问题,但我无法找到适合我目的的合适解决方案。所以我开始使用MVC并且必须创建一个简单的向导。我创建了父视图模型,
public class WizardSteps
{
public int CurrentStepIndex { get; set; }
public WizardStep1 Step1 { get; set; }
public WizardStep2 Step2 { get; set; }
public WizardStep3 Step3 { get; set; }
public WizardSteps()
{
CurrentStepIndex = 1;
Step1 = new WizardStep1();
Step2 = new WizardStep2();
Step3 = new WizardStep3();
}
}
现在我为每个向导步骤创建了三个部分视图。对于我使用父模型的每个视图,
@model eFormation_MVC.Models.WizardSteps
对于每个部分视图中的每个字段,我在表单中使用了这样的控件,
@Html.LabelFor(m => m.Step1.FirstName, new { @class = "col-sm-3 control-label" })
@Html.LabelFor(m => m.Step2.Address, new { @class = "col-sm-3 control-label" })
这是一个简短的代码,用于说明我到目前为止所做的工作。我对每个部分视图都有不同的控制器方法。我将Parent Model WizardSteps传递给控制器并将其传递回下一个Partial View。因此,使用具有子模型的所有部分视图单一模型。现在,当我从Second Partial View发布模型时,WizardSteps.Step1中的所有值都变为null。我也知道这是实际行为,但我的问题是如何坚持价值观。这样做的正确方法是什么,以便每个Step的值不会从Parent模型中丢失。
修改 每个局部视图都有自己的形式,我将父模型WizardSteps发送到控制器上,每个局部视图的表单提交。问题是,当我提交步骤2的部分视图时,WizardSteps中步骤1的值变为空。我知道发生这种情况是因为步骤2部分视图中的步骤1没有字段,控制器认为值为空并且不会持续存在。
在一些相关问题上,建议对模型进行序列化并将其存储在View上,然后将其发送回控制器并对其进行反序列化。有些人使用Sessions或TempData来存储模型,但我想要一些用模型完成的东西。在MVCWizard.Wizard - Using Complex Models使用MVCWizard有一个问题,但这个问题的答案是如此模糊,我无法理解。我希望使用Merge功能类似于MVCWizard,但找不到任何这样做的例子。需要帮助。