获取模型/对象以在 .Net Core 的局部视图中使用

Posted

技术标签:

【中文标题】获取模型/对象以在 .Net Core 的局部视图中使用【英文标题】:Fetching a model/object to use in a partialview in .Net Core 【发布时间】:2016-10-28 12:45:16 【问题描述】:

我正在编写一个 .Net Core 应用程序,大约在 3 周前开始后,我已经掌握了它。

我可以使用实体框架 (EF) 访问在线数据库。我有 4 个控制器控制 4 种不同类型的视图类别(每个类别包含 5 个视图(索引、删除、创建、编辑和详细信息))。每个控制器都在其 index 方法中创建一个 PaginatedList ,其中包含我在程序中拥有的 4 种模型类型中的任何一种。这用于根据不同的属性对列表中的项目进行排序。

分页列表.cs

public class PaginatedList<T> : List<T>

    public int PageIndex  get; private set; 
    public int TotalPages  get; private set; 

    public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
    
        PageIndex = pageIndex;
        TotalPages = (int)Math.Ceiling(count / (double)pageSize);

        this.AddRange(items);
    

    public bool HasPreviousPage
    
        get
        
            return (PageIndex > 1);
        
    

    public bool HasNextPage
    
        get
        
            return (PageIndex < TotalPages);
        
    

    public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
    
        var count = await source.CountAsync();
        var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
        return new PaginatedList<T>(items, count, pageIndex, pageSize);
    

关于 PaginatedList 的想法是我的数据库会随着时间增长,我想限制显示的项目数。

我已经实现了一小段代码,它用“成功”类标记表中的选定项目。一旦发生这种情况,我想抓取“选择”的项目并将其传递给 PartialView 以便我可以显示它的属性,但是由于使用 PaginatedList 作为模型,我很难访问我想要的项目。我希望这里有人可以解决这个问题?

以下部分是我尝试将我的用户传递给我的 PartialView 的地方:

UserController 索引方法

public async Task<IActionResult> Index(
        int? page,
        int? id)


    ....

    if (id != null)
    
        ViewData["UserID"] = id.Value;
     

    ....

    var users = from u in _context.Users select u;

    return View(await PaginatedList<User>.CreateAsync(users.AsNoTracking(), page ?? 1, pageSize));

用户索引.cshtml

@model PaginatedList<Project.Models.User>

....

@if (itemSelected) //true if item is selected - false otherwise.

    int elementID = (int)ViewData["ElementID"];
    <h4>@elementID</h4> //this return the id of the item that was selected

    //var user = Model.ElementAt<User>(elementID); //This is causing me trouble.

    @Html.Partial("PartialUserDetails", user)

如前所述,PaginatedList 是上述代码中的“模型”,所以要么我必须将我的 DbContext 添加到其中(不知道是否可能)并使用 elementID 我应该获取用户或者我必须想出一种不同的方式来获取用户。虽然 PaginatedList 能够根据不同的标准对我的项目进行排序,所以这些项目不会以时间顺序出现。例如

1, 2, 3, 4, 5

而是

2, 1, 5, 4, 3

我希望这里有人可以解决我的问题。

【问题讨论】:

【参考方案1】:

在疯狂搜索并到达互联网最黑暗和最深的角落后,我找到了解决方案。不是真的,但下面这行似乎是我的救星:

var user = Model.FirstOrDefault(u => u.UserID == elementID);

【讨论】:

以上是关于获取模型/对象以在 .Net Core 的局部视图中使用的主要内容,如果未能解决你的问题,请参考以下文章

[Asp.net Core]局部视图

[Asp.net Core]局部视图

将 jQuery JSON 对象保存到 SQL 表中,而无需在 MVC ASP.NET Core 中创建视图模型类

ASP.NET Core MVC:无法在表单标签内呈现字段

ASP.NET Core 3.1 - 将子项添加到剃刀局部视图

格式化来自模型的动态 json 字符串以在 .net 视图中显示