繁体   English   中英

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

[英]Fetching a model/object to use in a partialview in .Net Core

我正在编写.Net Core应用程序,大约三周前开始我就掌握了它。

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

PaginatedList.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));
}

用户Index.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

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

在像疯了似的谷歌搜索并到达了互联网最黑暗和最深的角落之后,我找到了解决方案。 并非如此,但以下几行似乎是我的救星:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM