只是尝试使用来自NuGet的NuGet作为多页向导UI的一部分。
我有一些“父”模型类,其中“子”类作为子类。
public class MainModel
{
public virtual int MainModelId { get; set; }
public virtual PersonalDetails CustomerPersonalDetails { get; set; }
public virtual AddressDetails CustomerAddressDetails{ get; set; }
public virtual FinanceDetails CustomerFinanceDetails{ get; set; }
}
经过反复试验,我发现要使用MVCWizard.Wizard,我必须在要显示的页面的每个部分创建一个" WizardManager“(比如CustomerPersonalDetails的一个WizardManager、控制器、部分视图等,CustomerAddressDetails等等)。
..so现在还不错..。
为每个分段创建控制器是从WizardController T继承的,其中T是模型。我想做的是对控制器进行编码,每个小节都使用它来接受MainModel的完整性,然后根据需要将MainModel.Child传递给每个部分视图( MVCWizard.Wizard似乎需要的方式)。
这样做,所有的编译都可以,但在使用中,在向导页(部分视图)之间来回导航-- base.Wizard().WizardModel中的数据正在被删除。
我发现,为了让它在来回导航时将数据保留在Base.Wizard().WizardModel中,我必须为每个WizardManager显式指定子类类型。
所以..。(控权人)
public MyController : WizardManager < MainModel >...
public PartialViewResult SubsectionPage1(MainModel mdl)..
(见图)
@model MainModel
CustName: @Html.TextBoxFor(m => m.CustomerPersonalDetails.CustName)
..looks喜欢它的工作,但是数据不被保留。但是..。
(控权人)
public MyController : WizardManager< PersonalDetails >...
public PartialViewResult SubsectionPage1(PersonalDetails details)..
(见图)
@model PersonalDetails
CustName: @Html.TextBoxFor(m => m.CustName)
效果很好..。为什么MVCWizard.Wizard似乎不能处理包含一个或多个“子”类型的“复杂”模型?最终,我可以对其进行编码,以便将这些较小的模型传递给WizardManager,然后在持久化数据存储之前将它们组合起来并映射到我的域模型中,但是我很感谢您的解释。
*编辑*
好的,我已经做了更多的研究,在大多数正常情况下,初始的模型绑定应该工作得很好。但在使用MVCWizard.Wizard时,问题似乎与MVCWizard.Wizard的"EnableSimpleMerge“特性有关。它在页面导航期间使用,并且该合并函数如何使用反射来发现模型中的属性似乎存在问题。从我的初步看,它似乎没有编码通过和“发现”一个更复杂的模型结构中的子对象。
private void Merge(T wizard, T model)
{
foreach (PropertyInfo info in model.GetType().GetProperties())
{
object obj2 = info.GetGetMethod().Invoke(model, null);
if (obj2 != null)
{
wizard.GetType().GetProperty(info.Name).GetSetMethod().Invoke(wizard, new object[] { obj2 });
}
}
foreach (FieldInfo info3 in model.GetType().GetFields())
{
object obj3 = info3.GetValue(model);
if (obj3 != null)
{
wizard.GetType().GetField(info3.Name).SetValue(wizard, obj3);
}
}
}
发布于 2012-09-12 14:38:28
(见上文评论:)
需要使用深度属性反射编写更详细的合并方法。
https://stackoverflow.com/questions/11937776
复制相似问题