7

VS2010 Ultimate、ASP.NET MVC 3 w/Razor。

MVC3 アプリで、ネストされた領域を許可するカスタム ビュー エンジンを作成しました。

~/areas/admin
    /marketing
        /views
            index       
        /controllers
            marketingController
        /email
            /views
                index
                ...
            /controllers
                emailController
        /templates
            /views
                index
                edit
                ...                  
            /controllers
                templatesControler

標準の場所にないビューでインテリセンスを失ったように見えることを除いて、これはすべてうまく機能します~/areas/area_name/views/myview.cshtml

助言がありますか?

アップデート

ひばりに @inherits ステートメントを追加しました

@inherits System.Web.Mvc.WebViewPage<Namespace.Models.Class>

そしてインテリセンスが働き始めました。その後、ステートメントを削除しましたが、引き続き機能します。

ファイル拡張子以外に、開いているファイルにどの種類のインテリセンスを適用するかを Visual Studio に指示するプロジェクト ファイルまたは何かの設定はありますか? (拡張機能が使用されたすべてである場合、私はそれがはるかに一貫性があると期待しています)。

更新 2

各ビュー フォルダーに web.config を追加すると問題はかなり解決しますが、かみそりの構成をルート web.config に配置しても問題は解決しません。

system.web.webPages.razorに必要なセクションを追加した後~/web.config

  1. 入れ子になったビュー フォルダーの 1 つに Razor .cshtml ビュー ファイルを追加します。
  2. インテリセンスは動作します。
  3. ファイルの名前を変更します (.cshtml 拡張子を保持します)
  4. Intellesense と構文の強調表示が機能しなくなります。
  5. 名前を変更したファイルを閉じて、もう一度開きます。すべてが再び機能し始めます。
  6. または、ファイルを閉じて再度開く代わりに、名前を元の名前に戻すと、再び機能し始めます。

これはVSのバグのように感じます.ファイルの名前を変更しても(ただし、適切な拡張子を維持して)、私が知る限り、この種の動作を引き起こすべきではありません. 問題を修正するため、各ビュー フォルダーに個々web.configの を配置し続けますが、他の web.config 設定と同様に、これらの設定がソリューション ツリー全体に反映されると予想される場合に、ソリューションを乱雑にする必要があるのは面倒です。

また、Razor 構成がどこにあっても、Intellesense が機能しているかどうかにかかわらず、サイトは引き続き正しく機能することにも注意してください。

解決済み

これは既知の問題であり、MVC3 RTM および VS2010 SP1 で修正されていることを Powers That Be から (信じられないほど迅速に) 知らされました。MVC3 のインストールを更新して SP1 を追加すると、この問題はなくなりました。

4

1 に答える 1

7

Views フォルダーには、Razor ビューの既定のオプションを設定する Web.config ファイルが@model含まれています。これには、既定の基本型と名前空間、およびディレクティブを有効にするカスタム ホストが含まれます。

別のフォルダー内の Razor ビューは、この構成を継承しません。
この構成をWeb.configフォルダー内の に追加する必要があります。

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.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" />
        </namespaces>
    </pages>
</system.web.webPages.razor>
于 2011-02-06T03:44:59.213 に答える