46
@model Customer

@Html.Partial("_UserProfile", (UserProfile)Model.UserProfile)

このコードを実行すると、次のエラーが発生します。

The model item passed into the dictionary is of type 'Customer', but this dictionary requires a model item of type 'UserProfile'.

部分ビュー _UserProfile は厳密に型指定されています。

これらのフィールドを編集できるようにしたいです。助言がありますか?

4

7 に答える 7

22

Model.UserProfileが null の場合、顧客モデルを渡そうとします。

これを回避するには、次の 2 つの方法があります。

@model Customer

@Html.Partial("_UserProfile", (UserProfile)Model.UserProfile, new ViewDataDictionary())

または:

@model Customer

if (Model.UserProfile != null)
{
   @Html.Partial("_UserProfile", (UserProfile)Model.UserProfile)
}
于 2014-02-15T00:13:05.543 に答える
1

Name や Address レコードなどのユーザー プロファイルの一部を処理しているときに、この問題に遭遇しました。ユーザーのプロファイルが不完全な場合、アカウント管理ビューで null の Address レコードを検出し、Action リンクを表示して新しい Address を作成するか、利用可能な住所データを表示するようにします。

他の人が説明したように、null が渡されると、Html.RenderPartial のオーバーロードがトリガーされ、親ビュー モデルが渡されます。それを回避するために、部分ビューを表示およびエディター テンプレートに変換することになりました。Hanslemancodeguruのハウツー記事をいくつか紹介します。

このメソッドから再利用性が向上し、null 値が保持されます。

@Html.DisplayFor( m=> m.Address)

次に、DisplayTemplate で null 値を処理します。

@model Namespace.Models.MyObject
...
if(@Model != null){
...
}else{
...
}
于 2014-11-13T14:51:43.687 に答える
-1

Customer モデルの UserProfile プロパティにキーワード「virtual」を追加します。遅延読み込みを克服する最も簡単な方法ですが、パフォーマンス..

于 2013-10-21T13:46:49.823 に答える