我正在尝试配置RazorEngine,以便intellisense对视图起作用。我使用nuget添加了RazorEngine和Microsoft.AspNet.Mvc。我创建TestView.cshtml并声明@model MyModel
,但它显示The name 'model' does not exist in the current context
。我也不能在视图中使用intellisense。
我在这里错过任何一步吗?如何在视图中启用intellisense?
答案 0 :(得分:30)
您可以使用
@using RazorEngine.Templating
@using Namespace.Of.My.Model
@inherits TemplateBase<MyModel>
位于模板顶部。
这适用于使用Visual Studio 2013的新控制台应用程序(在添加对RazorEngine的引用之后)。 相关文档为here。
编辑:
我注意到这只适用于将RazorEngine项目添加到解决方案并直接引用的情况。如果您使用NuGet包,则还需要确保以下其中一项使其正常工作:
bin\
,而不是bin\Debug\
和bin\Release\
。RazorEngine.dll
和System.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.清除解决方案并删除obj
和bin
个文件夹,而不是构建
我的观点&#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>
它不是一个很好的解决方案,但它可能很有用。