Вопрос

Я пытаюсь получить доступ к файлу .js в каталоге представлений.У меня есть приложение MVC с /вивс/home/mycontrol.ascx У меня есть файл js /views/home/mycontrol.js

Я хочу сослаться на файл .js и сохранить его под контролем.Я попробовал следующие записи в маршрутизации, и ни одна из них не работает.

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{file}.js");
        routes.IgnoreRoute("{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{controller}/{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{*alljs}", new { alljs = @".*\.js(/.*)?" });

Пожалуйста, помогите, не предлагайте добавлять файл .js в каталог сценариев.Я хотел бы заставить это работать таким образом или знать, почему это невозможно сделать.

Я бы поместил скрипт на страницу, только в VS2010 B2 не работает отладка скрипта.

Спасибо, Крейг.

Это было полезно?

Решение

А Views папка есть, ну для просмотров, а javascript надо ставить в другое место.Вот почему разработчики платформы MVC поместили web.config в этом Views папка, которая запрещает доступ к любому файлу внутри.Вы можете изменить эту настройку по умолчанию, но имейте в виду, что это может быть потенциальной дырой в безопасности.Итак, откройте web.config файл, расположенный в папке Views папка и:

Заменять:

<httpHandlers>
  <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

с:

<httpHandlers>
  <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.master" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.ascx" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

Перейдите к http://yoursite/Views/test.js

P.S.Вы также можете удалить все IgnoreRoutes ты вставляешь global.asax.

Другие советы

Разве это не было бы лучшим решением, используя Defaulthttphandler для HTML -ресурсов и поддержание Httpnotfoundhandler для всех других типов файлов

<httpHandlers>  
  <add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers> 

На самом деле для интегрированного режима IIS вам нужно использовать System.Web.StaticHttpHandler:

<httpHandlers>
  <add path="*.css" verb="*" type="System.Web.StaticHttpHandler"/> 
  <add path="*.js" verb="*" type="System.Web.StaticHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers>

Видимо System.Web.DefaultHttpHandler работает только в классическом режиме IIS.

В MVC 4 мне пришлось обновить раздел обработчика, а также раздел httpHandlers.

Я обновил web.config в папке «Views» следующим образом.

<httpHandlers>
  <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

<handlers>
  <remove name="BlockViewHandler" />
  <add name="BlockViewHandlerRazor" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
  <add name="BlockViewHandlerAspx" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top