Как сослаться на файл javascript в папке ASP.NET MVC 2 Views? - PullRequest
3 голосов
/ 02 мая 2011

Я пытаюсь приспособить корпоративный стандарт, в котором весь javascript уровня страницы содержится во внешнем файле и не включен в файл ASPX или ASCX. Используя ASP.NET MVC 2, мне интересно, как я могу ссылаться на файл скрипта (.js) относительно представления.

Другими словами, я не хочу помещать в папку Scripts все небольшие файлы .js, которые будут существовать в приложении. С организационной точки зрения наиболее целесообразно иметь файл .js вместе с файлом .aspx / .ascx. Например, если у меня есть контроллер с именем «MyController» с действием «MyAction», я бы имел файл MyAction.aspx в папке Views / MyController и хотел бы поместить файл сценария с именем «MyAction.js» в та же папка. Тем не менее, я не могу использовать:

<script src="MyAction.js" type="text/javascript"></script>

и похоже, что это тоже не работает:

<script src="<%= Url.Content("~/Views/MyController/MyAction.js") %>"
        type="text/javascript"></script>

Так что я предполагаю, что проблема, возможно, связана с таблицей маршрутизации, но я все еще новичок MVC, поэтому я не уверен.

Второй вопрос, возможно ли встраивать javascript как ресурс, который мы можем использовать в традиционном ASP.NET, и генерировать нечитаемый человеком URL на нашей странице клиента?

UPDATE

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

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Вы правы, это из-за маршрутизации MVC.Имейте в виду, что если вы открываете папку Views для файлов JavaScript, она также отображает ваши Views (которые, хотя и не должны, могут содержать некоторую логику интерфейса).

Лично я бы использовал папку scriptsи создайте там подпапки.

Редактировать: Возможно, вы захотите посмотреть здесь: Маршрутизация ASP.NET MVC и статические данные (например, изображения, сценарии и т. д.) о том, какASP.NET MVC обращается к файлам напрямую, и здесь: http://haacked.com/archive/2008/02/12/asp.net-mvc-blocking-direct-access-to-views.aspx о том, почему скрипты в вашей папке Views могут быть не доступны напрямую.

Если у вас есть web.config в вашей папке Views, и он настроенописанный во второй ссылке, тогда все внешние запросы к папке Views возвращают 404.

Edit2: Вы можете разрешить доступ к JavaScript только путем добавления:

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

Для web.config в вашей папке Views.Как вы можете видеть, я не уверен, какой тип обработчика будет разрешать прямой доступ.Идите дальше и добавьте его без типа обработчика, и вы увидите, что он вызывается при попытке доступа к файлам .js

0 голосов
/ 20 декабря 2012

Я также предпочитаю хранить свои скрипты, которые относятся только к определенному виду, внутри папки Views, чтобы эти скрипты не загрязняли мою Scripts, которую я резервирую для скриптов, к которым осуществляется глобальный доступ.Самое короткое решение этой проблемы, которое я нашел, состоит в следующем:

Измените httpHandlers в вашем web.config с этого:

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

на это:

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

Вот и все.Теперь вы можете поместить Javascripts в вашу папку просмотра и связать их следующим образом:

<script type="text/javascript" src="~/Views/<ControllerName>/script.js"></script>

Спасибо Вадиму Николаеву за это решение, которое он разместил здесь .

...