目前,我有加载此页面的页面:
<div class="accordion">
<h2><a href="#">Pending Flyers</a></h2>
<div id="flyers-0" class="accordion-item"><% Html.RenderPartial("ManageFlyers", new { flyers = pendingFlyersWithCategory }); %></div>
<h2><a href="#">Approved Flyers</a></h2>
<div id="flyers-1" class="accordion-item"><% Html.RenderPartial("ManageFlyers", new { flyers = approvedFlyersWithCategory }); %></div>
<h2><a href="#">Denied Flyers</a></h2>
<div id="flyers-2" class="accordion-item"><% Html.RenderPartial("ManageFlyers", new { flyers = deniedFlyersWithCategory }); %></div>
<h2><a href="#">Published Flyers</a></h2>
<div id="flyers-3" class="accordion-item"><% Html.RenderPartial("ManageFlyers", new { flyers = publishedFlyersWithCategory }); %></div>
<h2><a href="#">Expired Flyers</a></h2>
<div id="flyers-4" class="accordion-item"><% Html.RenderPartial("ManageFlyers", new { flyers = expiredFlyersWithCategory }); %></div>
</div>
使用这个java脚本来做手风琴的东西:
<script language="javascript" type="text/javascript">
if ($('.accordion').length > 0) {
$('.accordion-item').hide();
$('.accordion-selected').show();
$('.accordion h2').click(function () {
$(this).next('.accordion-item').slideToggle('slow');
});
$('.accordion h2 a').click(function () {
var element = $(this).parent().next('.accordion-item');
element.slideToggle('slow');
return false;
});
}
</script>
<script type="text/javascript">
$(document).ready(function () {
// Accordian state restore
var accord = '<%= Session["accordianIndex"] %>';
var currentindex = 0;
if (accord != "") {
currentindex = accord;
}
$("#flyers-" + currentindex).slideToggle("slow");
// end Accordian state restore
});
$("div.description").expander({
slicePoint: 200
});
</script>
我想将其设置为使用AJAX加载部分视图,并在展开手风琴的那部分时插入它们,以加快页面的初始加载速度。
我已尝试使用<%= Ajax.ActionLink ... %>
和javascript来加载它,但我无法让它工作。任何建议将不胜感激。
答案 0 :(得分:0)
如果为这些partial设置Controller Actions(PartialViewResult),可以使用jQuery $ .ajax调用加载它们。你会写类似
的东西$.ajax({ url: /controller/Action, data: {stuff} });
这种方法可以让您偏移加载时间,就像您在切换手风琴时在点击方法或其他事件中描述的那样。
更新:
如果您已经拥有此页面的本地数据,我建议您执行类似Handlebars模板和$(&#34; div&#34;)的操作。将数据附加到页面上在div上你想要包含数据的选择器。
答案 1 :(得分:0)
当请求数据时,它并不完全是这样做的,但我改变了一些东西,并通过执行以下操作获得了所需的功能:
在$(document).ready(function() { ... });
内我使用了
$('#flyers-0').load('<%= Url.Action("ManageFlyers", new { stuff }) %>');
每个手风琴标签的。所以现在页面最初加载得更快,然后在加载数据时填充div。如果在加载数据之前没有打开div,他们就不会知道它是否有任何背景内容,否则它只是说“正在加载......”并很快填写。