如何让intellisense与RazorEngine一起使用?

时间:2014-11-11 10:09:39

标签: c# asp.net .net asp.net-mvc razorengine

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

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

3 个答案:

答案 0 :(得分:30)

您可以使用

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

位于模板顶部。

这适用于使用Visual Studio 2013的新控制台应用程序(在添加对RazorEngine的引用之后)。 相关文档为here

编辑:

我注意到这只适用于将RazorEngine项目添加到解决方案并直接引用的情况。如果您使用NuGet包,则还需要确保以下其中一项使其正常工作:

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

答案 1 :(得分:5)

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

1.在Web配置文件中正确设置名称空间(希望你在views文件夹中有它,如果没有 - 从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.清除解决方案并删除objbin个文件夹,而不是构建

我的观点&#39;代码从@model MyModelClass开始,一切正常

答案 2 :(得分:4)

我知道这个问题有点陈旧。无论解决方案如何,我都无法工作。 我有一个修复程序可能对某些人来说很可口。我不是很喜欢它,但它是我迄今为止最有用的东西。

诀窍是定义&#34;模型&#34;你自己作为实际模型的变量。我把它定义为&#34; TrueModel&#34;,但是你能想到的任何名字都不会与#34; model&#34;或&#34;模型&#34;应该管用。然后只需替换&#34; Model&#34;的所有实例。使用&#34; TrueModel&#34;。

@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>

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