ASP.NET MVC AJAX Sys - неопределенная ошибка

Asked
Viewd16788

7

Я получаю сообщение об ошибке «Ошибка выполнения Microsoft JScript: 'Sys' is undefined» на одной из моих страниц в приложении MVC при попытке вызова AJAX. Вызов AJAX выполняется из частичного представления, которое встроено более чем в одну страницу. Он отлично работает на всех страницах, кроме одной. Я читал сообщения, указывающие на настройки файла web.config и сопоставления .axd как на возможные решения, но приложение правильно настроено в web.config, а сопоставления .axd также верны в IIS. Кроме того, он отлично работает на всех страницах, использующих это частичное представление, кроме одной. Это действует так, как будто библиотеки AJAX не загружаются для этой страницы.

Ссылки на файлы сценариев находятся в общем файле site.master. Все страницы, включая неработающую, ссылаются на одну и ту же главную страницу.

Есть идеи? Я работаю над этим уже два дня. Спасибо.

РЕДАКТИРОВАТЬ: Как указал Сэм ниже, похоже, что вызов AJAX срабатывает до того, как библиотеки AJAX загрузятся. Но вызов AJAX запускается кнопкой отправки спустя долгое время после отображения страницы, поэтому у библиотек AJAX было достаточно времени для загрузки - извините за недостаточную информацию в первый раз.

8 ответов

4

Загрузите страницу в Firefox, затем используйте Firebug для проверки страницы - вы сможете увидеть все отдельные загруженные скрипты, а также все сетевые запросы, которые были отправлены, и были ли они выполнены успешно или нет. Это лучше, чем пытаться устранять неполадки с точки зрения сервера.

Если вы используете IE8, вы можете использовать окно инструментов разработчика, но я думаю, что Firebug лучше - хотя оба инструмента поддерживают отладку JavaScript.

Наиболее вероятная проблема заключается в том, что вы запускаете скрипт в частичном представлении до того, как скрипты, от которых он зависит, успели загрузить - убедитесь, что любые вызовы скриптов, которые есть в частичном представлении, будут выполняться только после того, как загружается, а не сразу во время загрузки.

  • @Sam - сегодня утром взглянул на Fiddler и угадайте, что? Путь к файлу сценария неверен только для этой страницы. Пока не знаю почему, но когда я добавляю полный путь для скриптов, страница работает отлично. Спасибо, я отмечаю ваш ответ как правильный, поскольку он направил меня по правильному пути - с помощью инструмента, который сказал бы мне то, что мне нужно было знать два дня назад :)

    cnaegle24 июня 2009, 14:10
  • @Sam - Я уже взглянул на firebug и вижу, что обе библиотеки Ajax загружаются, когда я нажимаю на вкладку скриптов. Я не так хорошо знаком с firebug, поэтому, возможно, я что-то упускаю. Я много использовал скрипач, поэтому я посмотрю с ним завтра, когда приду в офис, чтобы убедиться, что вызов скриптов не дает сбоев. Поскольку вызов ajax запускается кнопкой отправки спустя долгое время после отображения страницы, я бы исключил, что у скриптов не было возможности загрузить. Спасибо.

    cnaegle24 июня 2009, 03:14
0

Добавить в web.config в раздел:

  <remove verb="*" path="*.asmx"/>

 <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

 <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

 <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
 

  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 

  • Как указано выше, файл web.config настроен правильно.

    cnaegle24 июня 2009, 13:03
20

В web.config добавьте следующую строку кода под тегом appsettings:

 <add key="UnobtrusiveJavaScriptEnabled" value="true" />
 
17

На всякий случай ... используйте следующее, чтобы избежать проблем с путями

 <script src="<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") %>" 
    type="text/javascript"></script>  
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js") %>" 
    type="text/javascript"></script>
 

Источник: http://msdn.microsoft.com/en-us/ библиотека / dd381533.aspx

Спасибо, Артистический

0

Я также обнаружил, что следующее работает с ASP.NET MVC2.

Вместо MicrosoftMvcAjax.js вы используете MicrosoftMvcValidation.js

Надеюсь, это кому-то поможет.

0

Что касается вашего ответа Сэму, во многих приложениях MVC я заметил одну вещь: люди не знают, как справиться с неоднозначностью относительных путей и приложения / среды выполнения. Например, перезапись URL-адреса в значительной степени гарантирует, что конкретная страница может отображаться на другой глубине, чем вы ожидали, поэтому ../../images будет указывать где-то еще в зависимости от того, смотрите ли вы на /products/widget или /products/widget/12345, даже если представление может быть одинаковым. Как указал Арти, лучший способ справиться с этим - позволить движку делать всю работу за вас, используя служебную программу URL и пути, относящиеся к приложению, которые будут исправлены приложением независимо от контекста.

3

Все вышеперечисленные случаи допустимы, но иногда разработчик забывает добавить файлы javascript для ajax, поэтому проверьте и это.