Это больше не работает, когда страница находится в другом месте, например, в папке Темы.
Это нормально.Представления должны находиться только внутри папки Представления .Им нечего делать за его пределами.
Причиной этого является файл ~/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
туда, где вы собираетесь разместить свои представления.