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

Но страница выдает ошибку javascript, поскольку «Sys.WebForms.PageRequestManager» имеет значение null или не является объектом. Я разместил ниже тег 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); когда вы делаете vieworce - person Nastya Kholodova; 15.08.2011
comment
под динамической страницей я имел в виду, что если мы дублируем в VS, будет показан код создаваемой страницы aspx, обряд? - person rocker; 15.08.2011

Похоже, что ваш блок JavaScript выполняется до загрузки ASP.net Ajax, попробуйте разместить его внизу страницы или после тегов <form>...

person Waqas    schedule 15.08.2011
comment
Привет .. Спасибо за ваш ответ. Я совершенно новичок в aspx. Так что, если я задаю глупые сомнения, пожалуйста, потерпите меня. На моей странице у меня нет тега «форма». Должен ли я разместить это внутри ‹/asp:Content› или вне его? - person rocker; 15.08.2011
comment
куда вы добавили ‹asp:ScriptManager›, в MasterPage или на странице aspx? Если в случае, если вы добавили его на страницу aspx, удалите его оттуда и добавьте под тегом ‹form› на своей мастер-странице. - 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
Привет, Вакас, я поместил его на главную страницу. Но все равно получаю ту же ошибку.... - 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

У меня тоже была эта проблема. Для меня это было связано с веб-фермой и отсутствующей записью машинного ключа в web.config.

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

person Darren J. McLeod    schedule 12.06.2012