1. ホーム
  2. asp.net-mvc-3

[解決済み] MVC Razor のダイナミックモデルで、'object' に 'PropertyName' の定義がない。

2022-11-17 10:18:35

質問

MVC 3 と Razor ビューエンジンを使用しています。 私はこのビューを持っています。

@model dynamic
@{
    var products = (List<ListItemBaseModel>)Model.Products;
    var threshold = (int)(Model.Threshold ?? 1);
    var id = Guid.NewGuid().ToString();
}

このコードを使って、別のビューから呼び出されます。

@Html.Partial("PartialViewName", new { Products = Model, Threshold = 5 })

両方のViewで、デバッグしてModelを見ると、正しいオブジェクトが含まれているように見えます。 コードを実行すると、"var products ="の行でエラーが発生します。

'object' は 'Products' の定義を含んでいません。

なぜこのようなエラーが発生するのか、どなたか教えてください。 繰り返しになりますが、デバッグモードでモデルオブジェクトを見ると、すべて正しく見えます(2つのプロパティ:ProductsとThresholdを持っています)。

どのように解決するのですか?

ビューモデルとして無名クラスのインスタンスを渡していませんか?私はちょうどこれを試してみました(CSHTMLでの動的なビューモデル)。匿名クラスを使用すると、あなたと同じエラーが発生しましたが、名前付きクラスを作成するとうまくいきました。検索してみましたが、どこにもこのドキュメントがありませんでした。

// error
return View(new { Foo = 1, Bar = "test" });

// worked
return View(new TestClass { Foo = 1, Bar = "test" });

EDIT #1です。

によると デビッド・エボ によると、動的型付けされたビューに無名型を渡すことはできないそうです。 internal . CSHTMLビューは別のアセンブリにコンパイルされているため、匿名タイプのプロパティにアクセスすることができません。

EDIT #2です。

David Ebbo は、この明確化のために投稿を編集しました。

追記 (2011/12/22): MVC 3 で dynamic が直接サポートされたので、以下のテクニックはもはや必要ありません。この投稿は、実際、この機能を MVC に統合することにつながったものです!