Лучший из известных мне методов - это использовать перцептуальный хэш. Кажется, есть хорошая реализация такого хэша с открытым исходным кодом, доступная по адресу:
Основная идея заключается в том, что каждое изображение сокращается до небольшого хэш-кода или «отпечатка пальца» путем выявления характерных особенностей в исходном файле изображения и хэширования компактного представления этих функций (вместо непосредственного хеширования данных изображения). Это означает, что уровень ложных срабатываний значительно уменьшается по сравнению с упрощенным подходом, таким как уменьшение изображений до изображения размером с крошечный отпечаток и сравнение отпечатков пальцев.
phash предлагает несколько типов хэшей и может использоваться для изображений, аудио или видео.
Загрузите страницу в Firefox, затем используйте Firebug для проверки страницы - вы сможете увидеть все отдельные загруженные скрипты, а также все сетевые запросы, которые были отправлены, а также указать, были ли удалось им или нет. Это лучше, чем пытаться устранять неполадки с точки зрения сервера.
Если вы используете IE8, вы можете использовать окно инструментов разработчика, но я думаю, что Firebug лучше - оба инструмента поддерживают отладку JavaScript.
Наиболее вероятная проблема заключается в том, что вы запускаете сценарий в частичном представлении до того, как сценарии, от которых он зависит, получили возможность загрузить - убедитесь, что любые вызовы сценариев, которые у вас есть в частичном представлении, будут запускаться только после загрузки страницы, а не сразу во время загрузки .
Добавьте в 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"/>
На всякий случай ... используйте следующее, чтобы избежать проблем с путями
<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
Спасибо, Арти
Что касается вашего ответа Сэму, во многих приложениях MVC я заметил одну вещь: люди не знают, как справиться с неоднозначностью относительных путей и приложения / среды выполнения. Например, перезапись URL-адреса в значительной степени гарантирует, что конкретная страница может отображаться на другой глубине, чем вы ожидали, поэтому ../../ images
будут указывать где-то еще в зависимости от того, смотрите ли вы на / products / widget
или / products / widget / 12345
, даже если представление может быть таким же. Как указал Арти, лучший способ справиться с этим - позволить движку делать всю работу за вас, используя служебную программу URL и пути, относящиеся к приложению, которые будут исправлены приложением независимо от контекста.
Я также обнаружил, что следующее работает с ASP.NET MVC2.
Вместо MicrosoftMvcAjax.js вы используете MicrosoftMvcValidation.js
Надеюсь, это кому-то поможет.