@ Url.Action не работает, когда находится где-то еще, кроме папки представлений - PullRequest
2 голосов
/ 31 декабря 2011

У меня есть представление Test.cshtml, где у меня есть возможность кодировать что-то вроде:

@Url.Action(.....)

Это работает, когда страница находится в папке Views.

Он больше не работает, когда страница находится в другом месте, например, в папке Темы.

Ответы [ 2 ]

2 голосов
/ 31 декабря 2011

Это больше не работает, когда страница находится в другом месте, например, в папке Темы.

Это нормально.Представления должны находиться только внутри папки Представления .Им нечего делать за его пределами.

Причиной этого является файл ~/Views/web.config, в котором указан тип всех представлений:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
</system.web.webPages.razor>

Обратите внимание на атрибут pageBaseType?Это то, что указывает на то, что представление происходит от класса System.Web.Mvc.WebViewPage, который определяет свойства, такие как Html и Url helpers.

Когда вы размещаете представление где-нибудь за пределами папки Views, я полагаю, вы забыли включить такой web.config в корень, чтобы ничего не определяло базовый тип ваших бритвенных страниц и, следовательно, такие вещи, как Url и Html.помощники больше не существуют.

Таким образом, одна из возможностей - нарушить все стандартные соглашения ASP.NET MVC и скопировать файл ~/Views/web.config туда, где вы собираетесь разместить свои представления.

1 голос
/ 31 декабря 2011

MVC основан на соглашениях.Таким образом, HTML-страницы, как ожидается, будут найдены в

~/Views/ControllerName/MyView.cshtml 
or 
~/Views/Shared/MyView.cshtml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...