Как сделать intellisense работы с RazorEngine?
Я пытаюсь настроить RazorEngine так, чтобы intellisense работал над представлениями. Я добавляю RazorEngine и Microsoft.AspNet.Mvc, используя nuget. Я создаю TestView.cshtml и объявляю @model MyModel
, но он говорит The name 'model' does not exist in the current context
. Я также не могу использовать intellisense внутри представления.
Пропустить какой-нибудь шаг здесь? Как включить intellisense в представлении?
Ответы
Ответ 1
Вы можете использовать
@using RazorEngine.Templating
@using Namespace.Of.My.Model
@inherits TemplateBase<MyModel>
в верхней части шаблона.
Это отлично работает в новом консольном приложении с Visual Studio 2013 (после добавления ссылки на RazorEngine).
Документация для этого здесь.
EDIT:
Я заметил, что это работает только тогда, когда проект RazorEngine добавляется к решению и напрямую ссылается. Если вы используете пакет NuGet, вам необходимо дополнительно выполнить одно из следующих действий:
- Выходной путь вашего проекта установлен на
bin\
вместо bin\Debug\
и bin\Release\
.
- Скопировать
RazorEngine.dll
и System.Web.Razor.dll
в bin\
Ответ 2
О, я столкнулся с такой проблемой, добавляя Razor Engine в свой проект dll. Чтобы решить эту проблему, вы должны:
1. корректно настроить пространства имен в файле веб-конфигурации (надеюсь, что у вас есть это в папке представлений, если нет - копирование из проекта MVC):
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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" />
<add namespace="System.Web.Optimization" />
</namespaces>
</pages>
</system.web.webPages.razor>
...
2. использовать для сборки в путь bin\
(не любой другой, вы можете использовать команду copy post-build для перемещения результатов в другое место)
3.clean и удалите папки obj
и bin
, чем build
Код моих просмотров начинается с @model MyModelClass
, и все работает нормально
Ответ 3
Я знаю, что этот вопрос старый. Я не мог заставить работать, независимо от решения.
У меня есть исправление, которое может быть приемлемым для некоторых. Мне это не очень нравится, но это самая полезная вещь, которую я получил до сих пор.
Трюк заключается в том, чтобы определить "Модель" самостоятельно как переменную из реальной модели. Я определил его как "TrueModel", но любое имя, которое вы можете себе представить, не сталкивается с "моделью" или "моделью", должно работать. Затем просто замените все экземпляры "Модели" на "TrueModel".
@using Namespace.To.My.Models
@* This line should still look like an error,
but we only really care about the intellisense in the rest of the .cshtml file. *@
@{ ModelType TrueModel = (ModelType)Model; }
<div>
@TrueModel.MyProperty is here now.
</div>
<p> @TrueModel.MyOtherProperty is great! </p>
Это не отличное решение, но может быть полезно.