【问题标题】:Asp.net-mvc pass ViewModel to partial viewAsp.net-mvc 将 ViewModel 传递给局部视图
【发布时间】:2013-07-14 12:21:10
【问题描述】:

这可能真的很愚蠢,但我就是想不通......

所以这就是问题所在。 我有一个模型 A 和一个模型 B。

class A
{
    B b = new B();
}

class B
{
    ...
}

现在,我有一个 B 的 ViewModel(但 A 没有)。

所以,现在我有一个视图强类型到 A。它调用另一个局部视图 B 来呈现 B 的所有属性。但是现在,我如何将 B 的视图模型传递给局部视图?我可以通过调用 Model.b 而不是 viewmodel 来传递模型!

【问题讨论】:

  • 简单的答案是否定的?我会抛出异常。
  • @Satpal 但是那该怎么办呢?我必须使用视图模型。
  • 只需将B 模型映射到ViewModel。您必须已经定义了映射器或转换器尝试使用它。在B 模型中定义了一个方法,它转换并返回ViewModel,你可以传递ViewModel
  • @Satpal Ohk.. 这正是我需要做的.. 但我没有定义映射器或转换器。谷歌搜索它只会给出很多关于 AutoMapper 的页面......我不想使用。有这方面的示例代码吗??

标签: c# asp.net-mvc asp.net-mvc-partialview asp.net-mvc-viewmodel


【解决方案1】:

将 B 类作为属性包含在 A 类中。所以现在您可以将 B 类用作Model.bModel

class A
{
    public B bModel { get; set; }
}

class B
{

}

【讨论】:

    【解决方案2】:

    您需要扩展您的一个 ViewModel,以便它包含您想要访问的所有内容。然后根据您是在正常视图还是部分视图中访问它的不同组件。

    【讨论】:

      【解决方案3】:

      您可以通过 ViewBag 传递 B。在控制器中添加

      ViewBag.dataB = B;
      

      然后您可以使用模型渲染局部视图

      @Html.Partial("PartialName", ViewBag.dataB)
      

      或者你可以添加一个 getter 属性来访问 B 并使用它来渲染部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-05
        • 2011-09-26
        • 2014-06-11
        • 1970-01-01
        相关资源
        最近更新 更多