【问题标题】:Fetching a model/object to use in a partialview in .Net Core获取模型/对象以在 .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

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

【问题讨论】:

    标签: c# asp.net asp.net-mvc entity-framework view


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 2021-03-15
      • 2020-05-12
      • 2016-06-25
      相关资源
      最近更新 更多