Как сделать 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>

Это не отличное решение, но может быть полезно.