【问题标题】:Partial Views with view models different to the main view具有不同于主视图的视图模型的局部视图
【发布时间】:2014-03-15 20:54:44
【问题描述】:

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

所有三个 ViewModel 都是独立的。

当我运行应用程序时出现此错误:

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

我想知道我应该怎么做才能解决这个问题。

按照计划,主屏幕最终会将许多 PartialView 与它们自己的视图模型集成在一起。我是否在DashboardViewModel 中声明了部分视图模型?还是我只是有一个大的DashboardViewModel 用于所有部分视图?

【问题讨论】:

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


    【解决方案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 部分视图是 CustomerSearchVM 类的强类型。

    【讨论】:

    • 谢谢你的工作;虽然 CustomerSearch 不是强类型的,但它有一个 PartialView(用于 GridSearchResults),它是强类型的 CustomerSearchVM。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      相关资源
      最近更新 更多