想要在页面加载后进行转发器数据绑定

时间:2013-08-29 08:01:48

标签: c# asp.net repeater

我正在使用Web服务API来提取json数据,然后将其转换为Dataset并在页面加载内将数据显示到REPEATER中。现在我的问题是,有一种方法,我可以先加载页面,然后它会显示一个消息,如加载请等待,然后所有的处理,如拉数据和在转发器中显示发生。在asp.net页面生命周期中是否有类似的事件。

2 个答案:

答案 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元素。