我正在开发一个 MVC 3 Razor Web 应用程序,其中存储了多个对象类别的详细信息。(车辆、房屋、仪器等)。所有对象共享一些公共数据(标题、描述等)和一些特定于其所属类别的详细信息。Category 列表预计会增长,并且考虑到降低可维护性,我们希望重用相同的 Add Object 向导。该向导基于以下实现。
http://afana.me/post/create-wizard-in-aspnet-mvc-3.aspx
在多步骤向导过程中,最后一步允许用户输入特定类别的详细信息(车辆的型号、品牌、VIN 等)。目前我已经将这最后一步设想为使用 AJAX 的部分视图。因此,我们实际上将拥有多个反映特定类别的部分视图,但共享向导代码的其余部分。
我的通用模型对象是这样的
public class AssetView
{
[Required]
public string Title
{
get;
set;
}
[Required]
public string Description
{
get;
set;
}
// Few more generic fields here
public SpecificAsset AssetDetails { get; set; }
}
复杂属性 AssetDetails 由每种类型的局部视图表示。因此,PartialView“MotorDetails”将包含一个 MotorAsset 类型的强类型模型,声明如下。
public class MotorAsset : SpecificAsset
{
[Required]
public string Transmission
{
get;
set;
}
[Required]
public string Make
{
get;
set;
}
}
实际验证要复杂得多,但我省略了这些以便更容易理解。
主向导页面声明为
@model AssetView
.....
<div class="wizard-step">
....
</div>
<div class="wizard-step">
....
</div>
<div class="wizard-step">
@{Html.RenderPartial("_MotorCreate", Model.AssetDetails);
</div>
电机部分视图为
@model MotorAsset
我的问题是如何在这种情况下完成模型验证(或者是否可以使用),因为最后一步不是在视图页面中,而是在部分视图中。