我有 2 个标签。
- 第一个是最重要的,它加载内容非常快。
- 第二个不是很重要,加载它的内容(图表和摘要)需要很长时间
所以,我不想同时加载两个标签的内容。理想情况下,我只加载第一个选项卡内容,当用户单击第二个选项卡时,我将加载其相关内容(按需)。
为此,我需要在服务器端知道第二个选项卡已被单击,然后将所有相关信息发送回客户端。
关于如何做到这一点的任何想法?
jQuery UI 选项卡控件支持AJAX 内容填充选项卡。只需将href
选项卡链接设置为将返回 HTML 内容的服务器端 URL。
例如:
<div id="my-tabs">
<ul>
<li><a id="myfirst-link" href="/Server/One">First</a></li>
<li><a id="mysecond-link" href="/Server/Another">Second</a></li>
</ul>
</div>
$('#my-tabs').tabs({
load: function (event, ui) {
switch (ui.tab.id) {
case 'myfirst-link':
break;
case 'mysecond-link':
break;
}
},
ajaxOptions: {
success: function(result) {
},
error: function (xhr, status, index, anchor) {
}
}
});
如果您需要在选项卡完成加载后运行任何 Javascript,则可以使用该load
事件。如果您需要全局处理每个 ajax 调用的任何成功或错误,那么您可以使用ajaxOptions
.
为此,您必须在客户端和服务器端进行更改。在服务器端(或代码隐藏),将方法设为静态并使用 [WebMethod] 属性对其进行装饰。
public partial class _Default : System.Web.UI.Page
{
...
[WebMethod]
public static void MethodToBeCalledUsingAjax(parameters)
{
//tab clicked logic goes here
}
...
}
在客户端,在选项卡单击功能内,使用 jquery ajax 如下
var req = $.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Default.aspx/MethodToBeCalledUsingAjax",
data: "{}",
dataType: "json",
success: function (msg) {
}
});
此 ajax 调用应按需通知服务器端单击选项卡并相应地处理代码。
请忽略样式...我是stackoverflow的新手:)
用于jQuery-UI Tabs: Content via AJAX
填充选项卡。来源:http: //jqueryui.com/demos/tabs/#ajax
这是代码(从上面的链接中获取):
<script>
$(function() {
$( "#tabs" ).tabs({
ajaxOptions: {
error: function( xhr, status, index, anchor ) {
$( anchor.hash ).html(
"Couldn't load this tab. We'll try to fix this as soon as possible. " +
"If this wouldn't be a demo." );
}
}
});
});
</script>
<div class="demo">
<div id="tabs">
<ul>
<li><a href="#tabs-1">Preloaded</a></li>
<li><a href="ajax/content1.html">Tab 1</a></li>
<li><a href="ajax/content2.html">Tab 2</a></li>
<li><a href="ajax/content3-slow.php">Tab 3 (slow)</a></li>
<li><a href="ajax/content4-broken.php">Tab 4 (broken)</a></li>
</ul>
<div id="tabs-1">
<p>Sample Text</p>
</div>
</div>
</div>
虽然我还没有找到如何在单击 jQuery 选项卡时在代码隐藏中触发事件,但是可以使用带有事件处理程序的JuiceUI 选项卡来执行此操作SelectedTabChanged
您不应等待用户单击第二个选项卡。相反,您可以做的是填写 document.onReady 事件的第一个选项卡。它应该使用请求的 ajax 获取第一个选项卡的内容。
收到第一个 ajax 请求的回复后,在回复回调中,对第二个选项卡发出新请求。这样,当用户处理第一个选项卡时,它将在后台加载,当他/她切换到第二个选项卡时,它也将准备就绪。
在您的文档中使用它
$(document).ready(function() {
var req = $.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Default.aspx/MethodToBeCalledUsingAjax",
data: "{}",
dataType: "json",
success: function (msg) {
}
});
});
在success: 函数中,放置用于加载第二个选项卡的代码。