使用PageMethods无限滚动ASP.NET Web窗体

时间:2016-08-25 15:35:28

标签: c# jquery asp.net ajax

我一直试图做一些像无限滚动的工作,但没有成功。在网上搜索了很多,我自己也在问这个问题。

关于代码, 在masterPage.Master中我放了:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>

在后面的代码中的另一个页面上,我有一个这样的方法,将由脚本调用:

[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static List<agendaList> GetEvents(int startAt, int howMany)
{

    ...

    return eventsListNew.OrderByDescending(p => p.data).Skip(startAt).Take(howMany).ToList<agendaList>();
}

在页面中我添加了脚本:

<script type="text/javascript">
    $(document).ready(function () {
        $(window).scroll(function () {

            if ($(window).scrollTop() == $(document).height()-$(window).height()) {
                GetEvents();

            }
        });
    });

    function GetEvents() {
        var howMany = 10;
        var startAt = $(".mason_script").size();
        console.log(startAt);

        PageMethods.GetEvents(startAt, howMany);


    }

    function OnGetPostsComplete(Events) {
        for (var i = 0; i < Events.length; i++) {

            $("#list_eventos_content").last().append("<ul>"+
                            Events[i].title + "</h2><p>" +
                            Events[i].data + "</p></div>" + "</ul>");
        }
    }

</script>

它说PageMethods没有定义! 特别是在控制台我得到: 未捕获的ReferenceError:未定义PageMethods

我尝试使用ajax方法,但没有成功:

<script type="text/javascript">
    $(document).ready(function () {
        $(window).scroll(function () {
            var howMany = 10;
            var startAt = $(".mason_script").size();
            if ($(window).scrollTop() == $(document).height() - $(window).height()) {
                //GetEvents();

                console.log(startAt);
                $.ajax({
                    type: "POST",
                    //async: true,
                    url: "default.aspx/GetEvents",
                    //url: '<%= ResolveUrl("ConsultaPedidos.aspx/GetClients") %>',
                    //data: {startAt:startAt,howMany:howMany},
                    data: JSON.stringify({ startAt: startAt, howMany: howMany }),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function () { alert("success"); },
                    error: function () {alert("it was not a success");}
                });

            }
        });
    });
</script>

我认为该网站已经启用了ajax,因为它已经完成了Visual Studio 2010,我认为我拥有所有必要的垃圾箱(我甚至将System.Web.Extensions.dll添加到项目中)

我不知道这是否有助于找到问题,但在body元素之后的源代码中我有以下内容:

<body id="body" class="home">
    <div>
        <form method="post" action="./Default.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTY1NDU2MTA1Mg9kFgJmD2QWAgIDDxYCHgVjbGFzcwUEaG9tZRYCAgEPZBYIAgQPFgIeB1Zpc2libGVoZAIFD2QWBAIDDxYCHwFoZAIFDxYCHwFoZAIIDxYCHwFoZAIJD2QWAmYPFgIfAWhkZHECEx2bRG9W3HRdtf7e7U4T5JxcYTUIOFqhiAfLIgzr" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


<script src="/WebResource.axd?d=eTLIdTUaKcPvbbHq3uBMJMuE5EuUKGo_QXsf5WdWsog2Gpmfy9qkIK_-y74XUCFlxJFADxQgAgshTA379vvKJGJvi4Ikqiv1yEvS7hpyqVc1&amp;t=635918767619348548" type="text/javascript"></script>


<script src="/ScriptResource.axd?d=qkRHwPohnv0qxNzn-8f9Xk8Z0dBG23n8MDuOOCYf4anPCmyRNRWeCNNgCauDnRlVqW5NKLUOVIfNjW56x6pHNSKmtX7CBH7SpCqDvmzy-NHrCoITbgWSVLGcKILzzGQ1Qlpwpc9IIxnLVQ51v9Kz9DCgKlPHgukhQEeDMmKkQtiLHT1xZPJVocodYa8aG11L0&amp;t=40eb3b32" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('Falha ao carregar estrutura ASP.NET Ajax do lado do cliente.');
//]]>
</script>

<script src="/ScriptResource.axd?d=gU20UmsqL_uPpdXkHzmyFnlCqFiRG-TM2_Qv0ZALZUtlYUJwYdUdoCXOyXFrEkZWVT92wbL9D1m0HngfHHZW6U8GVV-j6jTKDIjQ4UrIHIXmsJyijp8fEm7m7Qeq-8buVg1yHzCv2Zqt_ktAHum363tvYlDt3B2fmD8Q3YF2jvkK8HbizNFHmiEcaIil3BlR0&amp;t=40eb3b32" type="text/javascript"></script>
<div class="aspNetHidden">

    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="CA0B0334" />
    <input type="hidden" name="__SCROLLPOSITIONX" id="__SCROLLPOSITIONX" value="0" />
    <input type="hidden" name="__SCROLLPOSITIONY" id="__SCROLLPOSITIONY" value="0" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAALKL6JprTutrB5uCf6KA5FA2RsWv7CsEAlbyK1tt2kzFFESTmnJ8bzYWS2HmzbItmQmobFjEmOUyk9VeVTmAEW9" />
</div>
        <input type="hidden" name="ctl00$hidMenu" id="hidMenu" value="menu_home" />
        <script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ctl00$ScriptManager1', 'form1', [], [], [], 90, 'ctl00');
//]]>
</script>

只有这样才会出现页面的其余部分和调用PageMethod的脚本。

由于

0 个答案:

没有答案