我正在使用MVC5并且最初有一个带有手动分页的标准MVC实现,一切都很顺利。除此之外,当我向朋友展示时,他就像“这些数字的东西在这里是什么?” (指的是分页按钮,在他辩护中他正在使用他的智能手机)。那时我决定无限滚动会更好。
在看起来像是一百万次谷歌搜索之后,大多数解决方案(以及我能够理解的所有解决方案)都使用json和jquery。由于我已经使用Troy Goode的PagedList进行手动分页,我在这里推荐了他推荐的解决方案:
How Can I Convert My Paging Functionality To Use AJAX Insead?
而且,我使用json,jquery和把手来提出这个:
172.17.0.24
据我所知,它很有效,除了我现在似乎已经失去了使用razor html帮助器的能力,更具体地说,<div id="incidentsList"></div>
<div id="incidentsWaypoint">.</div>
@section Scripts{
<script id="incident-template" type="text/x-handlebars-template">
<div class="tRoot">
<div class="tRow">
<div class="index-title">
<a href="/Incidents/Details/{{IncidentId}}">{{Title}}</a>
</div>
</div>
<div class="tRow">
<div class="index-description">
{{Description}}
</div>
</div>
<div class="tRow">
<div class="pCount">
Count: {{Count}}
</div>
<div class="pSend">
!!!!Partial View Here!!!!
</div>
</div>
</div>
</script>
<script type="text/javascript" src="/Scripts/handlebars-v3.0.3.js"></script>
<script type="text/javascript" src="/Scripts/waypoints.min.js"></script>
<script type="text/javascript">
var source = $("#incident-template").html();
var template = Handlebars.compile(source);
$(function () {
var page = 1;
var $incdiv = $('#incidentsList');
var $waypoint = $('#incidentsWaypoint');
var opts = { offset: '100%' };
$waypoint.waypoint(function () {
$waypoint.waypoint('remove');
$.getJSON('@Url.Action("AjaxPage", "Incidents")', { page: page++ }, function(incidents) {
$.each(incidents, function (index, incident) {
var pPartial = '@Html.Partial("_ProjectStatus", incident)';
//console.log(incident.Title);
//var context = { IncidentId: incident.IncidentId, Title: incident.Title, Description: incident.Description, Count: incident.Count };
var context = incident;
$incdiv.append(template(context));
});
$waypoint.waypoint(opts);
});
}, { offset: '100%' });
});
</script>
}
具有逻辑如下:
@Html.Partial("_ProjectStatus", incident)
所以,我不能只为此生成直接的HTML ...
我打算将把手模板切成小模板,然后希望在jquery中使用剃须刀助手,就像我从if (!Model.IsOwner(Context.User.Identity.Name))
{
if (Model.IsSent(userId))
{
开始一样,然后将它们全部附加在jquery代码中,但是想发布它首先,在我完成所有工作之前,看看我是否在正确的轨道上,尤其是(经过更多搜索之后)我还没有找到任何人试图这样做。
因此,我的问题是(我不希望他们都回答,我只是不确定要问什么,希望有人能看到我想要完成的事情),我会是什么样的试图在上一段甚至工作吗?在把手模板中,razor助手/逻辑是不可能的吗?是否有某些示例?...尤其是那些拥有完整实现的人(即某些事情比仅仅是一个实例中使用帮助器/逻辑的列表更复杂的东西)?是否有另一种方法可以进行无限滚动,这样我可以保留我的剃刀代码或仅使用部分视图(或类似)以及最小的jquery?
与往常一样,我感谢任何指导。谢谢。
答案 0 :(得分:0)
到目前为止,我通过将我的视图逻辑(从nerddinner中学习,这也让我想到另一个问题)移动到控制器,通过简单地将最后两行添加到我的json结果并将它们作为bools返回来修复它:
{{#unless IsOwner}}
{{#if IsSent}}
<div class="sent">Sent...</div>
{{else}}
<div class="sent">Not Sent...</div>
{{/if}}
{{/unless}}
然后在把手中,我做了:
cap deploy:upload
我尝试使用@ Html.Action进行局部视图以及其他一些让我无法理解他们甚至可能工作的事情。我喜欢把事情简单化,而且我做的几件事情明显变慢了(约20%)。
此修复程序也稍微快了约10%。也许是因为我现在没有拉动模型中的每一个字段?无论如何,希望我可以在模板中使用这些助手,但我可以忍受这一点,特别是因为它允许我继续...
我很想听到其他任何意见。感谢。