[英]Fetching a model/object to use in a partialview in .Net Core
我正在编写.Net Core应用程序,大约三周前开始我就掌握了它。
我可以使用实体框架(EF)访问在线数据库。 我有4个控制器来控制4种不同类型的视图类别(每个类别包含5个视图(索引,删除,创建,编辑和详细信息))。 每个控制器都在其索引方法中创建一个PaginatedList,其中包含我程序中拥有的4种模型类型之一。 这用于根据不同的属性对列表中的项目进行排序。
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的地方:
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));
}
@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.