0

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

4

2 回答 2

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;
}

这当然只是非常简短的答案,但我希望它能给你一些大致的想法。这是一个非常轻量级的解决方案,您会发现它比混合 ASP 中继器和更新面板等更有效。

要获得有关性能的一些真实数据,请安装 Fiddler 并进行比较。

另外,请查看这篇非常有用的文章,其中包含一些非常有用的建议: http ://encosia.com/use-jquery-and-aspnet-ajax-to-build-a-client-side-repeater/

于 2013-08-29T08:36:17.803 回答
1

在 ASP.NET 生命周期中没有类似的事件,尽管您可以使用 .NET 控件(更新面板、计时器等)设计一些东西,但更合理的解决方案可能是简单地使用 AJAX 和WebMethods(其中这里是一个例子)

您通常也可以省略服务器端中继器的外壳元素,而只填充本机客户端专用 HTML 元素。

于 2013-08-29T08:04:16.190 回答