web-dev-qa-db-ja.com

MVC 3ビューの「名前 'HTML'は現在のコンテキストに存在しません」

「MVC 3」を使い始めていますが、いくつかの小さな問題に直面しています。私のビューで、次のようなコードを作成すると:

@if(Request.IsAuthenticated) {
    <text>Welcome <b>@Context.User.Identity.Name</b>!
    [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
}
else {
    @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
}

@Requestや@Htmlなどのオブジェクトはエラーを示しています:The name 'HTML' does not exist in the current context

同じことが@ Context、@ ViewBag、@ Layout、@ Urlなどで発生します。

見る:

image

ただし、コードはエラーなしで正しくコンパイルされます。問題は、ビューでこれらのオブジェクトでIntellisenseを使用できないことです。普通ですか? (私はそうは思わない)。何が起きているのでしょうか?

MVC 3フレームワークを再インストールしましたが、同じことが引き続き発生します。

注:これは、MVC 2の移行ではなく、ゼロからの新しいプロジェクトです。これは、RazorエンジンとASPXの両方で発生します。

これは、Viewsフォルダー内のWeb.Configです。

<?xml version="1.0"?>

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="Host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

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

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>

  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>

    <!--
        Enabling request validation in view pages would cause validation to occur
        after the input has already been processed by the controller. By default
        MVC performs request validation before a controller processes the input.
        To change this behavior apply the ValidateInputAttribute to a
        controller or action.
    -->
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add Assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
</configuration>

ありがとう!

28
outlookrperson

私はこの問題を古い、良い、賢明なMicrosoftのデフォルトソリューションで解決しました。すべてを再インストールします。

Visual Studio 2010およびMVC 3フレームワークをアンインストールして再インストールします。

7
outlookrperson

あなたが試すことができます:

  1. 偽のエラーでViewを閉じます。

  2. 閉じるVisual Studio

  3. 同じプロジェクトを再度開く

  4. 別のViewを開き、エラーの原因となっているものを開きます

  5. Viewを閉じます。うまくいけば、このViewに同様のエラーが表示されないことを願っています。

  6. 以前に問題が発生したViewを再度開きます

19
Serj Sagan

ソリューションと参照をきれいにします。次に、次のプロパティを設定します。

System.Web.MVC file to Copy Local = True.
8
Manu

エディターで開いていたすべてのビューを閉じて再構築するだけでした。

5
steveareeno

私のために働いたのは、Visual Studioを閉じ、ユーザーオプションファイル(ソリューションとプロジェクトレベルの両方)を削除してから、Visual Studioを再起動することでした。

1
dChimento

私にとっては、これはコンパイラの警告があったという事実のように思えました。コードはまだコンパイルして正常に実行されますが、IntelliSenseが動作し始めるというすべてのビルド警告を修正するまでそうではありませんでした。

1
craigvl

System.Web.MVC、Copy Local = Trueのプロパティを設定します

0
Anup Shetty

必要なことは、Visual Studioを再起動して確認することだけです。

0

私はremove解決策でまだ問題が発生しているプロジェクトを再試行し、それを再度追加しました。その後、問題はなくなりました。

0
Pranithan T.

ドットネットコアSDK 2.2とVisual Studio Professional 2019を使用しています。

これは、Visual Studioのマングリングコードが原因でした。

かみそりビューにコードが貼り付けられました。 Visual Studioは試行しますが、自動フォーマットに失敗します。失敗の一部により、コードが削除されました。

Ctrl + zを押すとフォーマットは元に戻りますが、貼り付けたコードは保持されます。かみそりのコンパイルエラーが修正されました(The name 'Html' does not exist in the current context

貼り付けのフォーマットを無効にします( https://stackoverflow.com/a/28053865/1462295 を参照)。[ツール]-> [オプション]-> [テキストエディター]-> [HTML]-> [詳細]

0
BurnsBA
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

web.configのこの問題の解決策

0
ciqueira

ネクロポストについておologiesび申し上げます。

「ビルド|ソリューションのリビルド」を選択すると、Visual Studio 2015でこの問題が修正されました。私の場合、プロジェクトのプライマリネームスペースの名前を変更した後に警告が発生しました。再構築により、すべてがまっすぐになりました。

0
George N

MVC 4でも同じ問題が発生しました。これらのソリューションはどれもうまくいきませんでした。代わりに、Windowsで、[コントロールパネル]-> [プログラムのアンインストール]に移動しました。プログラムリストで[Microsoft ASP.NET MVC 4]を選択します。 [アンインストール]をクリックします。 「Microsoft ASP.NET MVC 4 Setup」ウィザードが表示されます。 [修復]をクリックします。

0
Jason

パッケージリストからEntityFrameworkをアンインストールした後、ASP.NET MVC 4でもこれを経験しました。

このセクションを削除する必要がありました

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, ....

web.configファイルに残っている...少なくともエラーリストからエラーを削除した

0
AceMark

私はASP .net coreを使用しています。Microsoft.AspNetCore.Mvc from 1.1.2から1.1.3

0
Lawrence

私にとっては、Visual Studioを再起動しただけで、すべてが修正されました。

0
Adeel Asghar

同じエラーが1回発生しましたが、モデル内の変数の1つをNULL不可からNULL可能に変更すると修正されました。試してみる。

0
The Hawk

私はこの質問に答えるのに少し遅れているかもしれませんが、この簡単な修正は私を助けました:

ファイルを右クリックして、「プロジェクトから除外」を選択します。ファイルを右クリックし、「プロジェクトに含める」。

0
Ron Splinter

私の場合、MVCとRazorを含むパッケージフォルダーが見つからなかったため、packages.configでパッケージを更新し、ビューを再度開いて機能しました。

0
derloopkat