ASP.NET MVC模型分为多个部分视图

我正在开发一个MVC 3 Razor Web App,其中存储了多种对象的细节。 (车辆,房屋,仪器等)。所有对象共享一些公共数据(标题,描述等)以及一些特定于其所属类别的细节。预计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
我的问题是如何在这种情况下完成模型验证(或者是否可以使用),因为最后一步不是在视图页面中而是在局部视图上。     
已邀请:
为什么不采用简单类继承(OOP范例)而不是在AssetView上使用属性AssetDetails? 而不是你现在拥有的,你应该声明 AssetView(通用属性) - > MotorView继承AssetView(特定属性) 像这样:
public class AssetView {     
    [Required]           
    public string Title { get; set; }

    [Required]
    public string Description     { get; set; }      

    // Few more generic fields here
}

public class MotorView : AssetView {
    ...
}

@model MotorView    // you still have access to the AssetView's properties in your view and in your controller actions
如果你想以现在的方式离开它,那么使用
EditorFor()
并在共享文件夹中创建一个
EditorFor
模板并强力键入
MotorAsset
(或
SpecificAsset
,如果你想要它更通用)。 然后像这样渲染出来:
@Html.EditorFor(model=>model.AssetDetails)
这将使控制器能够验证它并将其自动绑定到
AssetView
中的属性。 HTH     

要回复问题请先登录注册