MVC中同一页面上有多个ViewModel

时间:2013-12-12 07:24:46

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 kendo-ui

我有一个表单,其中我有三个部分视图和一个网格,所以这4个有4个不同的ViewModel正在使用。现在我的理解还会有一个ViewModel包含所有4个ViewModel和其中一个是Grid可以使用的IEnumarable。

我的代码如下:

    @model IEnumerable<Invoice.Models.ViewModels.Setup.AccountViewModel>

    @{
        ViewBag.Title = "Account";
        Layout = "~/Views/Shared/_LayoutGrid.cshtml";
    }



        @(Html.Kendo().Grid(Model)
            .Name("Account")
            .Columns(columns =>
            {

                columns.Bound(p => p.AccountType).Title("Account Type").Width(250);

                columns.Bound(p => p.AccountName).Title("Account Name").Width(300);

                columns.Bound(p => p.Currency).Title("Currency").Width(120);

                columns.Bound(p => p.Status).ClientTemplate("#=data.Status#").Width(150);

            })
            .ToolBar(toolbar =>
             {
                 toolbar.Template(@<text>
                    <div class="row-fluid">
                        <div class="span1">
                            <div class="toolbar" style="height:25px;">
                                <ul id="menu" style="width:38px; margin-left:22px;" class="span6">
                                    <li style="width:36px;">
                                        <i class="fa fa-plus"></i>
                                        <ul>
                                            @foreach (var account in @ViewBag.AccountType)
                                            {
                                                <li style="width:100px;" class="openid">
                                                    @if(@account.Value=="Bank")
                                                    {
                                                    <label id="Bank1">@account.Value</label>
                                                    }
                                                    @if(@account.Value=="CreditCard")
                                                    {
                                                    <label id="Credit">@account.Value</label>
                                                    }
                                                    @if(@account.Value=="Cash")
                                                    {
                                                    <label id="Cash1">@account.Value</label>
                                                    }
                                                </li>

                                            }
                                        </ul>
                                    </li>
                                </ul>
                            </div>
                        </div>
                    </div>
                </text>);
             })


            <div id="Bank">
            @Html.Partial("_BankDetails")
        </div>

        <div id="Cash">
            @Html.Partial("_CashDetails")
        </div>

        <div id="Credit">
            @Html.Partial("_CreditCardDetails")
    </div>

在这里您可以看到我正在使用AccountViewModel来显示Grid Only,但还有3个ViewModel用于提交这些部分视图。

1 个答案:

答案 0 :(得分:3)

您可以创建一个视图模型,它结合了您需要的4个视图模型:

public class FullAcountModel
{
    public IEnumerable<AccountViewModel> Accounts { get; set; }

    public CashDetails CashDetails { get; set; }

    public BankDetails BankDetails { get; set; }

    public CreditCardDetails CreditCardDetails { get; set; }
}

使用此模型,您可以像这样创建网格:

@(Html.Kendo().Grid(Model.Accounts)

这样的偏见:

@Html.Partial("_BankDetails", Model.BankDetails)