.net - 入門 - razor ページ とは




ASP.NET MVC厳密に型指定されたビューのコンパイルエラー (3)

Web.ConfigでOperatorModel適切に参照していますか? これにより、 OperatorModelを明示的に参照できるようになります。

<namespaces>
    <add namespace="My.Namespace"/>

あるいは、 Inherits値を次のように変更することもできます。

Inherits="System.Web.Mvc.ViewPage<My.Namespace.OperatorModel>"

また、モデルオブジェクトをビューに渡すときは、nullをチェックするか、空のOperatorModel返すようにしてください。

return View(operatorModel 
    ?? new OperatorModel() { Text = "I can has not found!" });

これは奇妙なものです。 私は何かを変えました(何が分からないのか)、今度は私のアプリのビューは実行時にコンパイルされません。

ビュー自体は強く型付けされています:

<%@ Page Language="C#"
         MasterPageFile="~/Views/Shared/Site.Master"
         Inherits="System.Web.Mvc.ViewPage<MyNamespace.OperatorModel>" %>

私がページにアクセスすると、コンパイルに失敗し、

CS1061: 'オブジェクト'に 'ログ'の定義が含まれておらず、拡張メソッドがありません 'オブジェクト'の最初の引数を受け入れる 'ログ'が見つかりました(使用するディレクティブまたはアセンブリ参照がありませんか?

かなり標準誤差。 対応するソースコード行は次のとおりです。

<%= Html.HiddenFor(model => model.Log) %>

コンパイラが生成したコードを見ると、ビューの基本クラスが強く型付けされていないことがわかります。

[System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
public class views_operator_create_aspx
    : global::System.Web.Mvc.ViewPage, // NOT STRONGLY TYPED
      System.Web.SessionState.IRequiresSessionState,
      System.Web.IHttpHandler {

だから私の質問は、ビューのコンパイラがビューの定義で自分のInherits属性を無視する原因になるのですか?

私は、同じコントローラ上の他のビューが動作していることを指摘しておき、上に示したものとまったく同じページ宣言があります。

誰かがどこかに永続化されていると仮定して、生成されたソースコードファイルがどこにあるのか知っていますか?

編集私は原因(以下の私の答えで)が見つかりましたが、私はなぜこれが起こっているのか分かりません。 もし誰かが私がそれを感謝すると説明することができます!


あなたの/ Viewsフォルダのルートにある特別な、魔法のweb.configファイルを削除することはありませんでしたか?

[これは少なくとも1ヶ月に1回私をキャッチします]


私はこのような完全に奇妙なエラーが発生した場合、私はすべての私のファイルのシャドウコピーを削除すると、それをクリアします。 あなたはそれを見つけるでしょう:

%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

上記の行で使用しているフレームワークのバージョンを置き換えてください。 プロジェクトに対応するすべてのファイルを削除します(またはディレクトリ内のすべてを削除します)。

w3pサービスをシャットダウンして、すべてのファイルを削除して削除できるようにする必要があります。

また、あなたが探している生成されたソースコードが見つかると思います。





strongly-typed-view