CreateCar向导上的一个ViewModel的多个视图

时间:2013-01-22 11:49:30

标签: c# asp.net-mvc viewmodel partial-views

我有一个包含5个步骤的向导,在每个步骤中我都会从用户那里获取他的汽车销售信息。首先是它的操作类型(Sale,Rent),第二个是类别(Car,Truck,Boat),第三个是项目的详细信息(Make,Model,Version),四个是额外的,五个是成员地址。 / p>

每个步骤选项列表都是使用@ Ajax.ActionLink构建的,并将结果发送到以下母版页中的特定DIV(操作 - >类别 - >广告 - >附加组件 - >会员 - >创建):

@model Heelp.ViewModels.CreateAdViewModel

@using (Html.BeginForm(MVC.Ad.Create(), FormMethod.Post, new { id = "createAdForm" })) 
{
    @Html.AntiForgeryToken()
    <div id="operation">
         @{ Html.RenderAction(MVC.Ad.CreateAdOperation()); }
    </div>
    <div id="category"></div>
    <div id="ad"></div>
    <div id="extras"></div>
    <div id="member"></div>

   <input type="submit" value="Create" />
}

此母版页具有“主”ViewModel“CreateAdViewModel”,它将接收来自所有步骤的所有信息,创建要发送到CreateAd操作的所有“输入”。

我现在拥有的是每个步骤的ViewModel:

public class CreateAdOperationViewModel
{
    // Operation Fields
}

public class CreateAdCategoryViewModel
{
    // Category Fields
}

public class CreateAdViewModel
{
    // Common Ad Fields
}

public class CreateAdCarViewModel : CreateAdViewModel
{
    // Car View Model Fields
}

主要的问题是要知道这个解决方案是否有意义,因为我知道,每个View应该拥有自己的ViewModel,但我需要提交一个基于不同Views的主ViewModel,每个View都有自己的ViewModel。 / p>

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您可以跨视图共享ViewModel,因为这些视图需要访问相同的数据。如果共享数据仅是部分数据,而不是整个视图,则可以使用包含共享数据的共享“context”属性的单独ViewModel(每个View一个ViewModel)。

以下是一篇示例文章,介绍了如何执行此操作:http://blog.bitdiff.com/2012/05/sharing-common-view-model-data-in.html

祝你好运!