1

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

选项的每个步骤列表都是使用 @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" />
}

此母版页具有“主”视图模型“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,但我需要提交一个基于不同 View 的主 ViewModel,每个 ViewModel 都有自己的 ViewModel。

感谢您的时间。

4

1 回答 1

0

您可以在 View 之间共享 ViewModel,前提是这些 View 需要访问相同的数据。如果共享数据只是部分而不是整个视图,您可以拥有单独的 ViewModel(每个 View 一个 ViewModel),并具有包含共享数据的共享“上下文”属性。

这是一个示例文章,展示了如何做到这一点: http: //blog.bitdiff.com/2012/05/sharing-common-view-model-data-in.html

祝你好运!

于 2013-01-22T12:01:46.447 回答