如何使intelligense与RazorEngine协同工作

本文关键字:RazorEngine 协同工作 intelligense 何使 | 更新日期: 2023-09-27 18:30:07

我正在尝试配置RazorEngine,以便intellisense在视图上工作。我使用nuget添加了RazorEngine和Microsoft.AspNet.Mvc。我创建了TestView.cshtml并声明@model MyModel,但它表示The name 'model' does not exist in the current context。我也不能在视图中使用intellisense。

我错过了这里的任何一步吗?如何在视图中启用intellisense?

如何使intelligense与RazorEngine协同工作

您可以使用

@using RazorEngine.Templating
@using Namespace.Of.My.Model
@inherits TemplateBase<MyModel>

在模板顶部。

这在带有Visual Studio 2013的新控制台应用程序上运行良好(添加对RazorEngine的引用后)。这方面的文档在这里。

编辑:

我注意到,只有当RazorEngine项目被添加到解决方案中并被直接引用时,这才有效。如果你使用NuGet包,你还需要确保以下其中一项使其工作:

  1. 项目输出路径设置为bin',而不是bin'Debug'bin'Release'
  2. RazorEngine.dllSystem.Web.Razor.dll复制到bin'

我知道这个问题有点过时了。不管解决办法如何,我都做不到任何事情。我有一个破解程序,可能会受到一些人的欢迎。我不太喜欢它,但它是迄今为止我得到的最有用的东西。

诀窍是将"模型"定义为实际模型中的一个变量。我把它定义为"TrueModel",但无论你能想到什么名字,它都应该与"model"或"model"不冲突。然后只需将"模型"的所有实例替换为"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>

这不是一个很好的解决方案,但可能有用。

哦,我在将Razor引擎添加到我的自定义dll项目时遇到了这样的问题。要解决这个问题,你必须:

1.在web配置文件中正确设置名称空间(如果没有,希望您在视图文件夹中有它-从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'路径(不是任何其他路径,您可以使用复制后构建命令将结果移动到另一个位置)

3.清洁溶液并删除objbin文件夹,然后构建

我的视图的代码从@model MyModelClass开始,所有操作都很好