web-dev-qa-db-ja.com

RazorEngineでインテリセンスを機能させる方法は?

インテリセンスがビューで機能するようにRazorEngineを構成しようとしています。 nugetを使用してRazorEngineとMicrosoft.AspNet.Mvcを追加します。 TestView.cshtmlを作成し、@model MyModelを宣言しましたが、The name 'model' does not exist in the current contextと表示されています。ビュー内でインテリセンスを使用することもできません。

ここでステップを逃しますか?ビューでインテリセンスを有効にする方法は?

18
Anonymous

使用できます

@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.dllbin\にコピーします
32
matthid

私はこの質問がちょっと古いことを知っています。解決策に関係なく、私は何も機能させることができませんでした。一部の人にとっては口に合うかもしれないハック修正があります。あまり好きではありませんが、これまでで一番使いやすいものです。

秘訣は、「モデル」を実際のモデルからの変数として自分で定義することです。私はそれを「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>

これは優れたソリューションではありませんが、役立つ場合があります。

5
Zachary Dow

ああ、カスタム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で始まり、すべて正常に機能します

5
FLCL