我有一个包含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>
感谢您的时间。
答案 0 :(得分:0)
您可以跨视图共享ViewModel,因为这些视图需要访问相同的数据。如果共享数据仅是部分数据,而不是整个视图,则可以使用包含共享数据的共享“context”属性的单独ViewModel(每个View一个ViewModel)。
以下是一篇示例文章,介绍了如何执行此操作:http://blog.bitdiff.com/2012/05/sharing-common-view-model-data-in.html
祝你好运!