Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET内核将ID传递给控制器以显示页面_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# ASP.NET内核将ID传递给控制器以显示页面

C# ASP.NET内核将ID传递给控制器以显示页面,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我正在尝试使用DbContext在页面中显示数据 这是我的控制器: public async Task<IActionResult> Index(int? page) { int _page; if (page.HasValue) { _page = page.Value; } else _page = 1; return Vie

我正在尝试使用
DbContext
在页面中显示数据

这是我的控制器:

  public async Task<IActionResult> Index(int? page)
    {
        int _page;
        if (page.HasValue)
        {
            _page = page.Value;
        }
        else
            _page = 1;
        return View(await _context.Agent.Skip(_page-1).Take(10).ToListAsync());
公共异步任务索引(int?页)
{
国际网页;
如果(第页,HasValue)
{
_page=page.Value;
}
其他的
_page=1;
返回视图(wait_context.Agent.Skip(_page-1).Take(10.ToListAsync());
以及包含链接的“我的布局”页面:

 <li><a asp-area="" asp-controller="Agents" asp-action="Index" asp-route-id="1" >סוכן</a></li>
  • סוו
  • 两件事:

    A) 它似乎不起作用,无论我在
    asp路由id中传递什么,都会显示相同的列表。我做错了什么

    B) 工作完成后,我如何呈现页面供用户选择?(例如1,2,3..90)


    谢谢。

    您的参数名为
    page
    ,但您提供了一个
    id
    路由值。将
    page
    参数的操作方法重命名为
    id
    ,它应该可以工作。

    Michal回答了您的第一个问题。关于第二个问题,您可以使用第三方标记帮助程序,如

    或者为视图编写自己的分页逻辑实现,如下所示(主要基于),这不是一个完美的分页实现,但仍然有效:

    页面的模型:

    public class PageViewModel
    {
        public int PageNumber { get; }
        public int TotalPages { get; }
    
        public PageViewModel(int count, int pageNumber, int pageSize)
        {
            PageNumber = pageNumber;
            TotalPages = (int)Math.Ceiling(count / (double)pageSize);
        }
    
        public bool HasPreviousPage => (PageNumber > 1);
    
        public bool HasNextPage => (PageNumber < TotalPages);
    }
    
    并在视图中使用它,如(别忘了在_ViewImports.cshtml中导入标记助手):

    控制器的名称和代码:

    public async Task<IActionResult> Index(int page=1)
    {
        int pageSize = 10;
        var count = await _context.Agent.CountAsync();
        var items = await _context.Agent.Skip((page - 1) * pageSize).Take(pageSize).ToListAsync();
    
        PageViewModel pageVm= new PageViewModel(count, page, pageSize);
        IndexViewModel vm= new IndexViewModel
        {
            PageViewModel = pageVm,
            Agents =items // need to create table in view from Agent properties
        };
        return View(vm);
    }
    
    更新2

    为了使用这种方法,请不要忘记将索引页的模型更改为
    IndexViewModel
    ,并在_ViewImports.cshtml中注册标记帮助程序

    @* Using and tag helper imported in _ViewImports.cshtml *@
    @model IndexViewModel
    
    @{
        ViewData["Title"] = "Home";
    }
    
    <div>
        <table class="table">
            <tr><th>Name</th><th>Age</th></tr>
            @foreach (var a in Model.Agents)
            {
                <tr><td>@a.Name</td><td>@a.Age</td></tr>
            }
        </table>
    
    </div>
    
    <pager page-model="@Model.PageViewModel" page-action="Index" page-controller="Home"></pager>
    
    @*使用并标记在_ViewImports.cshtml中导入的帮助程序*@
    @模型索引模型
    @{
    ViewData[“标题”]=“主页”;
    }
    姓名
    @foreach(Model.Agents中的var a)
    {
    @a。Name@a.Age
    }
    
    更新3

  • 如果您像我上面写的那样使用
    IndexViewModel
    ,但不像我的示例中那样使用foreach,那么您应该将
    @Html.DisplayNameFor(model=>model.Name)
    更改为
    @Html.DisplayNameFor(model=>model.Agents.Name)
  • @addTagHelper*,Microsoft.AspNetCore.Mvc.TagHelpers
    只导入内置的ASP.NET核心标记帮助程序。要导入自定义标记,您应该使用
    @addTagHelper*,YourAssemblyName
    ,其中
    YourAssemblyName
    是您的项目名称('AgentApp`例如),请参阅以获取更多信息

  • 看起来您正在使用
    asp.net核心
    .tagaccordingly@Rahul是的,修复了。谢谢,它成功了。在另一个主题上,我如何在底部添加动态页面选择(根据存在的数据量生成?)非常感谢。这似乎正是我所需要的。@sagi没有问题。很高兴提供帮助。嘿,我不知道在视图
    中具体在何处实现该用法,我试图将其放在
    索引
    页面中,但我收到一个错误
    IENumerable不包含PageViewModel的定义
    @sagi请检查我的回答。我想你忘了将视图的
    @model
    IENumerable
    更改为
    IndexViewModel
    public class IndexViewModel
    {
        public IEnumerable<Agent> Agents { get; set; }
        public PageViewModel PageViewModel { get; set; }
    }
    
     public override void Process(TagHelperContext context, TagHelperOutput output)
     {
         IUrlHelper urlHelper = urlHelperFactory.GetUrlHelper(ViewContext);
         output.TagName = "div";
    
         // we put our links in list
         TagBuilder tag = new TagBuilder("ul");
         tag.AddCssClass("pagination");
    
         for (int i = 1; i <= PageModel.TotalPages; i++)
         {
             TagBuilder linkItem = CreateTag(i, urlHelper);
             tag.InnerHtml.AppendHtml(linkItem);
         }
    
         output.Content.AppendHtml(tag);
     }
    
    @* Using and tag helper imported in _ViewImports.cshtml *@
    @model IndexViewModel
    
    @{
        ViewData["Title"] = "Home";
    }
    
    <div>
        <table class="table">
            <tr><th>Name</th><th>Age</th></tr>
            @foreach (var a in Model.Agents)
            {
                <tr><td>@a.Name</td><td>@a.Age</td></tr>
            }
        </table>
    
    </div>
    
    <pager page-model="@Model.PageViewModel" page-action="Index" page-controller="Home"></pager>