部分视图与视图模型不同于主视图

时间:2014-02-16 16:45:17

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-2

我的主屏幕的视图模型为DashboardViewModel。它具有带有自己的ViewModel的PartialViews,例如CustomerSearchViewModelSelectProductViewModel

所有三个ViewModel都是独立的。

当我运行应用程序时,我收到此错误:

  

传递到字典中的模型项是类型的   'Invoice.Web.ViewModels.DashboardViewModel',但是这本字典   需要类型的模型项   'Invoice.Web.ViewModels.SearchCustomerWindowVM'。

我想知道如何解决这个问题。

按照计划,主屏幕最终会将很多PartialViews与他们自己的视图模型集成在一起。我是否在DashboardViewModel内声明了部分视图模型?或者我只是为所有partialViews提供一个大的DashboardViewModel

2 个答案:

答案 0 :(得分:1)

您可以将部分视图视图模型作为主视图模型的属性,并调用Html.Partial并传递这些属性。

public class DashBoardVM
{
  public string Name { set;get;}
  public CustomerSearchVM CustomerSearch { set; get;}

  public DashBoardVM()
  {
    CustomerSearch =new CustomerSerachVM();
  }
}

在信息中心视图中

@model DashBoardVM
<h2>@Model.Name</h2>
@Html.Partial("CustomerSearch",Model.CustomerSearch)

假设CustomerSearch部分视图是强类型o CustomerSearchVM class。

答案 1 :(得分:1)

另一种选择是使用Html.Action()或Html.RenderAction()。这允许您从父视图调用完全独立的控制器,并返回完全不同的非关联模型。这是关于渲染部分视图和动作的非常好的解释。 http://www.midnight-coding.com/2013/01/partial-vs-action-vs-renderpartial-vs-renderaction.html