ASP.NET MVC AJAX Sys - неопределенная ошибка - PullRequest
7 голосов
/ 24 июня 2009

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

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

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

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

Ответы [ 8 ]

18 голосов
/ 19 апреля 2012

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

<add key="UnobtrusiveJavaScriptEnabled" value="true" />
17 голосов
/ 21 декабря 2009

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

<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/library/dd381533.aspx

Спасибо, Arty

4 голосов
/ 24 июня 2009

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

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

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

3 голосов
/ 28 октября 2010

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

1 голос
/ 11 августа 2014

В основном вы можете отсутствовать: MicrosoftMvcAjax., MicrosoftMvcValidation.debug и MicrosoftMvcValidation ссылки на файлы JS.

Выполните следующие шаги:

  1. PM> Install-Package MicrosoftAjax

  2. PM> Install-Package MicrosoftMvcAjax.Mvc5

  3. Включите их в bundleconfig, как показано ниже:

    bundles.Add(new ScriptBundle("~/bundles/mvcFoolProof")
           .Include("~/Scripts/MicrosoftAjax*",
                    "~/Scripts/MicrosoftMvcAjax*", 
                    "~/Scripts/MicrosoftMvcValidation*",
                    "~/Scripts/mvcfoolproof*",
                    "~/Scripts/MvcFoolproofJQueryValidation*",
                    "~/Scripts/MvcFoolproofValidation*"));
    

Теперь все должно работать без ошибок.

0 голосов
/ 22 августа 2010

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

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

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

0 голосов
/ 21 декабря 2009

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

0 голосов
/ 24 июня 2009

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

 <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"/>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...