我正在使用Web服务API来提取json数据,然后将其转换为Dataset并在页面加载内将数据显示到REPEATER中。现在我的问题是,有一种方法,我可以先加载页面,然后它会显示一个消息,如加载请等待,然后所有的处理,如拉数据和在转发器中显示发生。在asp.net页面生命周期中是否有类似的事件。
答案 0 :(得分:2)
我建议你改变策略。而不是将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中创建一个将调用此服务的函数: //但在通话之前,请显示loading ..标签
$('#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;
}
这当然只是非常简短的回答,但我希望它能给你一些总体思路。这是一个非常轻量级的解决方案,你会发现它比混合ASPs中继器和更新面板等更有效。
要获得关于性能的一些实际数字,请安装Fiddler并进行比较。
另外,请查看这篇非常有用的文章,其中包含一些非常有用的建议: http://encosia.com/use-jquery-and-aspnet-ajax-to-build-a-client-side-repeater/
答案 1 :(得分:1)
在ASP.NET生命周期中没有类似的事件,尽管你可以设想.NET控件(更新面板,计时器等),但更合理的解决方案可能是简单地使用AJAX和{{ 3}}
您通常也可以省略服务器端转发器的外壳元素,并且只填充本机客户端HTML元素。