Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
Asp.net mvc PartialView MVC-PartialView功能不同于视图_Asp.net Mvc_Pagination_Partial Views - Fatal编程技术网

Asp.net mvc PartialView MVC-PartialView功能不同于视图

Asp.net mvc PartialView MVC-PartialView功能不同于视图,asp.net-mvc,pagination,partial-views,Asp.net Mvc,Pagination,Partial Views,我有一个“票”的观点,有一个“评论”的部分观点。一张票可以有很多评论。我想在票证视图中创建注释的部分视图,以便在不影响票证视图的情况下向注释添加分页功能。(我将有另外两个具有相同功能的分区,它们与不同的数据相关,但与票证相关)我正在尝试使用Nuget提供的PagedList库 理论上,我将票证模型传递给GetComments控制器,在那里我搜索票证注释,比较票证的注释。我会将注释的ToPagedList返回到部分视图。我希望分页在部分视图中工作,并与GetComments控制器一起工作。(我想让

我有一个“票”的观点,有一个“评论”的部分观点。一张票可以有很多评论。我想在票证视图中创建注释的部分视图,以便在不影响票证视图的情况下向注释添加分页功能。(我将有另外两个具有相同功能的分区,它们与不同的数据相关,但与票证相关)我正在尝试使用Nuget提供的PagedList库

理论上,我将票证模型传递给GetComments控制器,在那里我搜索票证注释,比较票证的注释。我会将注释的ToPagedList返回到部分视图。我希望分页在部分视图中工作,并与GetComments控制器一起工作。(我想让票据的“详细信息”控制器具有“开箱即用”功能,例如返回视图(db.Tickets.find(id))

我以前从未实现过部分,这是我学习MVC的第4周,因此非常感谢您的帮助

父视图:TicketDetails.cshtml

 @model  DearSanta.Models.Ticket
  //ticket display markup removed to simplify

 // Where I wan my partial view of comments
 <div class="col-md-4">        
    @Html.Partial("GetComments", Model)
</div>
@Html.Partial()呈现视图-它不通过控制器传递。它最常用于静态内容。如果需要通过控制器传递,则应使用@Html.Action()

请注意,您的代码将尝试呈现通过它的部分视图“DearSanta.Models.Ticket”,尽管您的部分视图期望“IPagedList


有关@Html.Partial()和@Html.Action之间更详细的区别,请参阅。

我想指出,我的问题有两个问题

第一个问题是,我没有像Dzhenko指出的那样使用@HTML.Action。这解决了使用局部视图注入自己的控制器的问题,我可以将某个对象或值传递给它

我在这个问题上遇到的第二个问题是,my@Html.PagedListPager没有进行Ajax调用。这导致我的整个页面仅使用部分重新加载。因此,我将代码更改为以下内容,它现在生成一个具有部分视图的父视图,该部分视图可分页,分页仅适用于部分

父视图:

@model  DearSanta.Models.Ticket
     //ticket display markup removed to simplify

    // Where I wan my partial view of comments
 <div class="col-md-4">        
     @Html.Action("GetComments", new { ticketId = Model.TicketId })
</div>
我希望将来有人会觉得这个解决方案很有帮助。这是我的第二篇文章,有了答案。我开始能够从社区的嘻哈爱好者那里得到东西了!!;)


向特洛伊大声呼喊,要那个可爱的插件

此解决方案使用自己的控制器解决部分视图的部分渲染问题,谢谢。
         //Controller references: using PagedList;
                                  using PagedList.Mvc;


 public PartialViewResult GetComments(Ticket model, int page = 1)
    {
        int pageSize = 3; 

        var comments = db.TicketComment.Where(c => c.TicketId == model.TicketId).ToPagedList(page, pageSize);

        return PartialView("GetComments", comments);
    }
@model  DearSanta.Models.Ticket
     //ticket display markup removed to simplify

    // Where I wan my partial view of comments
 <div class="col-md-4">        
     @Html.Action("GetComments", new { ticketId = Model.TicketId })
</div>
@model  PagedList.IPagedList<DearSanta.Models.TicketComment>
@using PagedList.Mvc;

@section CSS{
    <link href="~/Content/PagedList.css" rel="stylesheet" type="text/css">
}


<div id="comments">
    <h4 class="title">Ticket Comments</h4>

    <ul class="timeline">
        @foreach (var c in Model)
        {

            <li>
                <i class="fa fa-comment"></i>
                <span class="date">@c.CreateDate.ToString("d MMM")</span>
                <div class="content">
                    <p><strong>@c.User.DisplayName</strong> @c.Comment</p>
                    <small>@Convert.ToInt32(((DateTime.Now - c.CreateDate).TotalDays)) days ago</small>
                </div>
            </li>

        }
    </ul>
    <div>
        Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
        @Html.PagedListPager(Model, 
                                page => Url.Action("GetComments", new { ViewBag.ticketId, page }), 
                                PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing( new AjaxOptions(){  HttpMethod = "GET", UpdateTargetId = "comments"})
                             )
    </div>
</div>
public PartialViewResult GetComments(int? ticketId, int page = 1)
        {
            int pageSize = 3;

            var comments =  (from c in db.TicketComment
                                where c.TicketId == ticketId
                                orderby c.CreateDate descending
                                select c).ToPagedList(page, pageSize);

            ViewBag.ticketId = ticketId;

            return PartialView("GetComments", comments);
        }