【问题标题】:does a partial view always need a model passed from the top-level view?局部视图是否总是需要从顶级视图传递的模型?
【发布时间】:2017-05-15 03:10:26
【问题描述】:

这是一个描述 MVC 中部分视图的 url:

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial

根据这个 url,部分视图似乎绑定到从部分视图的顶级/父视图传递给它的模型。这是实现部分视图的标准和预期方式吗?

这似乎表明打算从多个不同父视图使用的局部视图应该具有某种类型的关联专用类,该类可用于将其数据返回给多个不同的视图模型构建器。这是对 MVC 局部视图架构的正确解释吗?

【问题讨论】:

    标签: c# .net asp.net-mvc partial-views


    【解决方案1】:

    是的。默认情况下,它使用父视图(视图)模型。但是你总是可以显式地向它传递另一个模型(只要传递的模型的类型与视图的强类型相同)。

    @Html.Partial("MyPartialView",Model)
    

    或者

     @{ var data = new MyClass { SomeProperty = "SomeValue"};
     @Html.Partial("MyPartialView",data )
    

    假设MyPartialView 被强类型化为MyClass

    @model MyClass

    例如,如果您的主视图是强类型的 Order 类,该类具有像这样的 Customer 属性

    public class Order
    {
      public int OrderId { set;get;}
      public Customer Customer { set;get;}
    }
    public class Customer
    {
      public string Name { set;get;}
    } 
    

    您可以通过传递Model.Customer,从您的主视图调用客户类的强类型部分视图

    @model Order
    <h2>@Model.OrderId</h2>
    @Html.Partial("Customer",Model.Customer)
    

    假设您的客户视图强类型为Customer 类型

    @model Customer
    <h2>@Model.Name</h2>
    

    只要您有一个 Customer 对象可以传递给它,您就可以从任何地方调用 Customer 局部视图。 (如果你的父视图是强类型的 Customer 类,你不需要显式传递它)

    【讨论】:

    • 感谢 shyju。所以听起来模型不能独立地与局部视图相关联。即 - 部分视图的模型必须始终从父视图传递,对吗?
    • 不!它可以有其他类型。查看答案
    • 感谢 shyju,所以听起来我可以在没有模型参数的情况下调用 @Html.Partial("CustomerDetails") 并且 MVC 默认会自动尝试绑定到父模型?在您上面提供的示例中,那将是 Customer 模型?
    • 是的。如果您使用仅采用视图名称的重载,则采用父模型。
    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多