我建议您改变策略。不要将 ASP 服务器控件及其事件与 AJAX 混合使用,而是使用经典的 AJAX (jQuery) + html/css。
您的中继器将是一个简单的 div
<div id="DataWrapper">
<div id="loadingLabel" style="display:none;">Loading...</div>
<div id="DataContainer">
</div>
</div>
然后您可以使用页面 Web 方法或 ASMX Web 服务(或我个人更喜欢的启用 AJAX 的 WCF 服务):
public static IEnumerable GetMyData(int KeyID)
{
DataTable sourceData = GetRepeaterData(KeyID);
return sourceData.AsEnumerable().Select(row =>
{
return new
{
id = row["ID"].ToString(),
someName = row["UserName"].ToString(),
someSurname = row["userSurname"].ToString()
};
});
}
在 JavaScript 中创建一个调用该服务的函数:
//但在调用之前,显示加载..标签
$('#loadingLabel').show();
$.ajax({
type: 'POST',
url: '/' + 'GetMyData',
data: {'KeyID':'8'},
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 30000,
success: onSuccess,
error: onError
});
..并在 JavaScript 中循环遍历结果:
function onSuccess(result)
{
var src = result.d;
for (var post in src) {
/*
here you can create an JavaScript element and assign a CSS class to it
*/
$("#DataContainer").append('<div class="myClass">'+ src[post].someName+'</div>');
}
// when loading is finished hide the loading.. label
$('#loadingLabel').hide();
}
..和 CSS:
.myClass
{
border: 1px single #000000;
padding: 5px;
}
这当然只是非常简短的答案,但我希望它能给你一些大致的想法。这是一个非常轻量级的解决方案,您会发现它比混合 ASP 中继器和更新面板等更有效。
要获得有关性能的一些真实数据,请安装 Fiddler 并进行比较。
另外,请查看这篇非常有用的文章,其中包含一些非常有用的建议:
http://encosia.com/use-jquery-and-aspnet-ajax-to-build-a-client-side-repeater/