インテリセンスがビューで機能するようにRazorEngineを構成しようとしています。 nugetを使用してRazorEngineとMicrosoft.AspNet.Mvcを追加します。 TestView.cshtmlを作成し、@model MyModel
を宣言しましたが、The name 'model' does not exist in the current context
と表示されています。ビュー内でインテリセンスを使用することもできません。
ここでステップを逃しますか?ビューでインテリセンスを有効にする方法は?
使用できます
@using RazorEngine.Templating
@using Namespace.Of.My.Model
@inherits TemplateBase<MyModel>
テンプレートの上部にあります。
これは、Visual Studio 2013を使用する新しいコンソールアプリケーションで正常に機能します(RazorEngineへの参照を追加した後)。このためのドキュメントは ここ です。
編集:
これは、RazorEngineプロジェクトがソリューションに追加され、直接参照されている場合にのみ機能することに気付きました。 NuGetパッケージを使用する場合は、それを機能させるために、さらに次のいずれかを確認する必要があります。
bin\
およびbin\Debug\
ではなくbin\Release\
に設定されます。RazorEngine.dll
とSystem.Web.Razor.dll
をbin\
にコピーします私はこの質問がちょっと古いことを知っています。解決策に関係なく、私は何も機能させることができませんでした。一部の人にとっては口に合うかもしれないハック修正があります。あまり好きではありませんが、これまでで一番使いやすいものです。
秘訣は、「モデル」を実際のモデルからの変数として自分で定義することです。私はそれを「TrueModel」と定義しましたが、「model」や「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>
これは優れたソリューションではありませんが、役立つ場合があります。
ああ、カスタム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\
パスへのビルドに使用します(他にはありません。ビルド後のコピーコマンドを使用して、結果を別の場所に移動できます)
3.ソリューションをクリーンアップし、ビルドするよりもobj
フォルダーとbin
フォルダーを削除します
ビューのコードは@model MyModelClass
で始まり、すべて正常に機能します