【问题标题】:.NET Core 2.0 Partial views with one to many relationship.NET Core 2.0 具有一对多关系的部分视图
【发布时间】:2018-11-08 21:24:09
【问题描述】:

我正在使用 ASP.NET Core 2.0,我正在尝试使用局部视图来列出一些项目。

我有这两个模型

public class Person {
    [Key]
    public String PersonID {get; set;}
    public String Name {get; set;}
}

public class Item {
    //PersonID and ItemName make the Primary key
    public String PersonID {get; set;} //Foreign Key to Person
    public String ItemName{get; set;}
    public String Description {get; set;}

    public Person Person {get; set;}
}

我有一个显示来自 Person 表的信息的视图。在下面,我想呈现一个部分视图,其中列出了该人拥有的项目。我创建了一个局部视图,但我不知道如何调用控制器函数来查询数据库或将项目列表传递给它。

【问题讨论】:

  • 理想情况下,当您从父视图中渲染局部视图时,父视图应该已经具有传递到局部视图所需的视图模型。否则,您将不得不求助于子操作 (Html.Action(...))
  • 重新阅读您的问题,我假设您已经加载了整个 Item 模型,以及它的 Person(一对一)关系。那么,假设那个部分的视图模型是你的Person,你为什么不能直接调用@Html.Partial("PartialName", Model.Person)
  • @haim770 我的显示页面中有 Person 模型。我曾想将 PersonID 传递给控制器​​并让它获取项目,然后将它们发送到部分视图以显示在表格中

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


【解决方案1】:

你应该像这样创建一个 PersonViewModel:

class PersonViewModel
{
    public string PersonId { get; set; }
    public string Name { get; set; }
    public IEnumerable<Item> Items { get; set; }
}

然后用控制器中的数据填充这个模型。然后将此模型传递给您的 Person 视图,并为每个 Item 创建一个局部视图,如下所示:

@foreach(var item in Model.Items)
{
    @Html.Partial("ItemPartial", item)
}

如果您需要更多帮助,请告诉我。

【讨论】:

    【解决方案2】:

    在视图中使用它来渲染部分视图@Html.Action("ActionResult method","ControllerName")

    控制器方法

    public ActionResult MethodName()
    {
        //Your logic to get and fill the data in model
        return View("_PartialViewName",model);
    }
    

    【讨论】:

    • 当我将@Html.Action() 放在视图中时。它告诉我'IHtmlHelper' 不包含'Action' 的定义,并且最佳扩展方法重载'UrlHelperExtensions.Action(IUrlHelper, string, object)' 需要'IUrlHelper' 类型的接收器 你知道我需要做什么来解决这个问题吗?
    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 2018-06-07
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2023-03-18
    • 2018-08-06
    相关资源
    最近更新 更多