【问题标题】:Want repeater databinding after page load页面加载后需要转发器数据绑定
【发布时间】:2013-08-29 08:01:48
【问题描述】:

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

【问题讨论】:

  • 你应该重新考虑改变你的计划。中继器是一个仅在服务器端工作的 asp 控制器。您想显示没有数据的页面,并使用不存在且不是已知元素的转发器在客户端加载数据。

标签: c# asp.net repeater


【解决方案1】:

我建议您改变策略。不要将 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/

【讨论】:

  • 使用泛型类型“System.Collections.Generic.IEnumerable”时出错,需要 1 个类型参数才能使用 IEnumerable
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多