„Sys.WebForms.PageRequestManager“ е null или не е обект

Здравейте, имам aspx страница, в която имам следния код

  <asp:ScriptManager ID="scriptManager" runat="server" AsyncPostBackTimeout="500" EnablePageMethods="true">
            </asp:ScriptManager>

            <script type="text/javascript">
          Sys.Application.add_init(BeginRequestHandler);
          Sys.Application.add_init(EndRequestHandler);

          Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
          Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
          function BeginRequestHandler(sender, args) {
              AsynProcessing('block', 'AlertDiv', 'ProcessingImage');
          }
          function EndRequestHandler(sender, args) {
              AsynProcessing('none', 'AlertDiv', '');
          }
          function AsynProcessing(visstring, elem, img) {
              var adiv = $get(elem);
              adiv.style.display = visstring;
              adiv.image = img;
          }

Но страницата извежда грешка в javascrip, тъй като „Sys.WebForms.PageRequestManager“ е нула или не е обект. Поставих под тага scriptmanager. Дори се забавих да добавя

<xhtmlConformance  mode="Transitional"/>

в секцията на web.config. Но все още получавам същата грешка.
Всяка помощ е много ценена. Благодаря предварително


person rocker    schedule 15.08.2011    source източник


Отговори (3)


Обвийте манипулаторите си с този код, за да изчакате зареждането на всички необходими скриптове, преди да извикате Sys.WebForms.PageRequestManager

Sys.Application.add_init(function(){ ... your code ....}

http://msdn.microsoft.com/en-us/library/bb397532.aspx

РЕДАКТИРАНЕ: Причината за грешката на този ред Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandl‌​er) е, че скриптовете все още не са заредени, така че ако искате обработка на асинхронно обратно изпращане, трябва да напишете нещо подобно:

Sys.Application.add_init(function(){ 
    Sys.WebForms
       .PageRequestManager
       .getInstance()
       .add_beginRequest(BeginRequestHandler)
});

Какво означава това на обикновен английски? Изчакайте, докато всички скриптове бъдат заредени (включително Sys.WebForms пространство от имена) и се абонирайте за събитие beginRequest Вашият скриптов блок трябва да бъде така:

<script type="text/javascript">
    Sys.Application.add_init(function () {
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
    });
    Sys.Application.add_init(function () {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    });

    function BeginRequestHandler(sender, args) {
        AsynProcessing('block', 'AlertDiv', 'ProcessingImage');
    }
    function EndRequestHandler(sender, args) {
        AsynProcessing('none', 'AlertDiv', '');
    }
    function AsynProcessing(visstring, elem, img) {
         var adiv = $get(elem);
         adiv.style.display = visstring;
        adiv.image = img;
    }  
</script>
person Nastya Kholodova    schedule 15.08.2011
comment
Здравейте благодаря.. Опитах това...Но когато Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); се изпълнява, WebForms е „недефиниран“. така че отново получавам същото изключение - person rocker; 15.08.2011
comment
Бихте ли споделили повече код, моля? Метод AsynProcessing и обект, който форсира манипулатора на beginRequest. Благодаря! - person Nastya Kholodova; 15.08.2011
comment
Здравейте...Опитах с кода, даден от вас, но все още получавам същата грешка. В aspx страницата съм дал Sys.Application.add_init(function () { Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); }); - person rocker; 15.08.2011
comment
но в динамичната страница се показва като "Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);" защо е така? - person rocker; 15.08.2011
comment
Съжалявам, изгубих идеята ви. Какво наричате динамична страница? Това ли е страницата, която виждате в браузъра? правилно ли те разбирам Вие сте написали на aspx Sys.Application.add_init(function () { Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandl‌​er); }); но браузърът показва Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHand‌​ler); когато правите viewsorce - person Nastya Kholodova; 15.08.2011
comment
под динамична страница, имах предвид, че ако дублираме във VS, кодът на aspx страницата, която се изгражда, ще бъде показан, rite? - person rocker; 15.08.2011

Изглежда, че вашият JavaScript блок се изпълнява, преди ASP.net Ajax да се зареди, опитайте да поставите това в долната част на страницата си или след <form> тагове...

person Waqas    schedule 15.08.2011
comment
Здравейте.. Благодаря за отговора. Напълно нов съм в aspx. Така че, ако задавам някакви глупави съмнения, моля, изтърпете ме. В моята страница нямам таг ‹form›. Трябва ли да поставя това вътре в ‹/asp:Content› или извън него? - person rocker; 15.08.2011
comment
къде сте добавили ‹asp:ScriptManager›, в MasterPage или в aspx страница? Ако в случай, че сте го добавили в aspx страницата, тогава го премахнете от там и го добавете под етикета ‹form› във вашата MasterPage - person Waqas; 15.08.2011
comment
можете ли да ми кажете как да намеря основната страница за определен aspx? - person rocker; 15.08.2011
comment
Във вашата aspx страница вътре в тага ‹%@Page %› (най-отгоре на вашата aspx страница), потърсете свойството MasterPageFile, то трябва да е нещо като xyz.Master ... - person Waqas; 15.08.2011
comment
Здравей Waqas, поставих го в основната страница. Но все още получава същата грешка.... - person rocker; 15.08.2011
comment
сте поставили ‹asp:ScriptManager› таг във вашата основна страница след формуляр и javascript блок, който сте поставили по-горе, вътре в ‹asp:Conten› тагове във вашата aspx страница? - person Waqas; 15.08.2011
comment
всъщност поставих и маркер, и скриптове в основната страница. Трябва ли да направя по друг начин? - person rocker; 15.08.2011
comment
не, поставете asp:ScriptManager след маркера ‹form› в основната страница и ‹javascript› блока вътре в ‹asp:Content› във вашата aspx страница, трябва да ги работи - person Waqas; 15.08.2011
comment
опитайте да използвате предложението на IceN, красиво е и съм сигурен, че ще работи - person Waqas; 15.08.2011

И аз имах този проблем. За мен това се дължи на уеб ферма и липсващ запис на machinekey в web.config.

<system.web>
 <machineKey validationKey="D61B3C89CB33A2F1422FF158AFF7320E8DB8CB5CDA1742572A487D94018787EF42682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
   decryptionKey="FBF50941F22D6A3B229EA593F24C41203DA6837F1122EF17" />

person Darren J. McLeod    schedule 12.06.2012