Asp.net mvc PartialView MVC-PartialView功能不同于视图
我有一个“票”的观点,有一个“评论”的部分观点。一张票可以有很多评论。我想在票证视图中创建注释的部分视图,以便在不影响票证视图的情况下向注释添加分页功能。(我将有另外两个具有相同功能的分区,它们与不同的数据相关,但与票证相关)我正在尝试使用Nuget提供的PagedList库 理论上,我将票证模型传递给GetComments控制器,在那里我搜索票证注释,比较票证的注释。我会将注释的ToPagedList返回到部分视图。我希望分页在部分视图中工作,并与GetComments控制器一起工作。(我想让票据的“详细信息”控制器具有“开箱即用”功能,例如返回视图(db.Tickets.find(id)) 我以前从未实现过部分,这是我学习MVC的第4周,因此非常感谢您的帮助 父视图:TicketDetails.cshtmlAsp.net mvc PartialView MVC-PartialView功能不同于视图,asp.net-mvc,pagination,partial-views,Asp.net Mvc,Pagination,Partial Views,我有一个“票”的观点,有一个“评论”的部分观点。一张票可以有很多评论。我想在票证视图中创建注释的部分视图,以便在不影响票证视图的情况下向注释添加分页功能。(我将有另外两个具有相同功能的分区,它们与不同的数据相关,但与票证相关)我正在尝试使用Nuget提供的PagedList库 理论上,我将票证模型传递给GetComments控制器,在那里我搜索票证注释,比较票证的注释。我会将注释的ToPagedList返回到部分视图。我希望分页在部分视图中工作,并与GetComments控制器一起工作。(我想让
@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);
}