2

我有这个 Index.cshtml 类:

@model ProOptInteractive.ViewModels.InvoicePageViewModel

@{
    ViewBag.Title = "Index";
}

<div>@Html.Partial("ListServices", Model.Services)</div>
<div>@Html.Partial("ListProducts", Model.Products)</div>
<div>@Html.Partial("Invoice", Model.InvoiceViewModel)</div>

这是我的 InvoicePageViewModel:

namespace ProOptInteractive.ViewModels
{
    public class InvoicePageViewModel
    {
        public InvoiceViewModel InvoiceViewModel { get; set; }
        public IEnumerable<Service> Services { get; set; }
        public IEnumerable<Product> Products { get; set; }
    }
}

问题是,每当我加载此视图时,我都会收到一条错误消息,指出我将错误的模型传递给了字典,并且它没有指定哪个部分视图导致了问题。每个部分都有不同的模型类型,一个 IEnumerable 称为 Product,另一个 IEnumerable 称为 Service,Invoice 部分视图具有一个称为 InvoiceViewModel 的视图模型。

任何人都可以解释如何进行这项工作吗?顺便说一句,我对 Razor 和 MVC 有点陌生。

更新

我收到此错误消息:

传入字典的模型项的类型为“ProOptInteractive.ViewModels.InvoiceViewModel”,但此字典需要“ProOptInteractive.ViewModels.InvoicePageViewModel”类型的模型项。

4

5 回答 5

2

错误是因为您已将Invoice局部视图设置为具有 type 的模型InvoicePageViewModel,但您将其传递给了 type 的模型InvoiceViewModel

要么将您的InvoiceViewModel属性更新为 type InvoicePageViewModel,要么将Invoice视图更改为使用 type 的模型InvoiceViewModel

于 2013-05-08T12:48:55.423 回答
2

错误在行<div>@Html.Partial("Invoice", Model.InvoiceViewModel)</div>

您的视图Invoice正在接受类型模型 InvoicePageViewModel并且您正在通过InvoiceViewModel

将您的代码更改为<div>@Html.Partial("Invoice", Model)</div>

或修改您的视图以Invoice接受InvoiceViewModel

@model ProOptInteractive.ViewModels.InvoiceViewModel

于 2013-05-08T13:08:35.167 回答
2

Invoice.cshtml可能开始于:

@model ProOptInteractive.ViewModels.InvoicePageViewModel

将其替换为:

@model ProOptInteractive.ViewModels.InvoiceViewModel
于 2013-05-08T14:02:23.240 回答
1

您可以像这样将模型传递给您的局部视图:

@Html.Partial("Invoice", Model.InvoiceViewModel) 

或类似的东西。

主视图模型:

class InvoicePageViewModel {
...
    public InvoiceViewModel InvoiceViewModel { get; set; }
    public IEnumerable<Service> Services { get; set; }
    public IEnumerable<Product> Products { get; set; }
...
}

然后更新您的局部视图以接受如下视图模型:

@model InvoiceViewModel

...
于 2013-05-08T12:14:48.663 回答
1

我发现了错误。它位于控制器方法中。当我调用 Index 视图(对应于 ActionResult Index 方法)时,我将 viewmodel InvoiceViewModel 返回到 Index 页面,即使它是对 InvoicePageViewModel 的强类型。我把它改成了这个,它有效:

public ActionResult Index()
{

    var invoice = InvoiceLogic.GetInvoice(this.HttpContext);

    // Set up our ViewModel
    var pageViewModel = new InvoicePageViewModel
    {
        Products = proent.Products.ToList(),
        Services = proent.Services.ToList(),
        InvoiceViewModel = new InvoiceViewModel
    {

        InvoiceItems = invoice.GetInvoiceItems(),
        Clients = proent.Clients.ToList(),
        InvoiceTotal = invoice.GetTotal()
    }
};
    // Return the view
    return View(pageViewModel);
}

感谢大家的帮助和建议。

于 2013-05-08T19:54:44.417 回答