@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は厳密に型指定されています。
これらのフィールドを編集できるようにしたい。助言がありますか?
Model.UserProfile
はnullではありません。
あなたの投稿が同じエラーをデバッグしようとしているのを発見し、「Model.UserProfile
"相当。
ここで何が起こっていると思いますか、ヌルモデルがRenderPartial
に渡された場合、デフォルトでメインビューのモデルが使用されますか?誰でもこれを確認できますか?
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)
}
名前や住所のレコードなど、ユーザープロファイルの一部を処理するときにこの問題に遭遇しました。ユーザーのプロファイルが不完全な場合、アカウント管理ビューでnullアドレスレコードを検出し、アクションリンクを表示して新しいアドレスを作成するか、利用可能なアドレスデータを表示します。
他の人が説明したように、nullが渡されると、Html.RenderPartialのオーバーロードがトリガーされ、親ビューモデルがパススルーされます。最終的には、部分ビューを表示テンプレートとエディターテンプレートに変換して回避しました。 Hansleman および codegur からのハウツー記事の一部を以下に示します。
このメソッドを使用すると再利用性が向上し、null値が保持されます。
@Html.DisplayFor( m=> m.Address)
次に、DisplayTemplateでnull値を処理します。
@model Namespace.Models.MyObject
...
if(@Model != null){
...
}else{
...
}
私は同じ問題に直面しましたが、ついにそれを理解しました。渡されたモデルにタイプの不一致があります。ビューはタイプCustomer
のモデルを受け入れますが、部分ビューはモデルUserprofile
を渡しています。したがって、両方に同じモデルを渡すか、 ....両方のモデルのすべてのプロパティを持つモデルを作成します。きっとあなたの問題は解決されるでしょう。
渡されたアイテムがnullの場合、初期モデルにフォールバックします。
これを試して:
@Html.Partial("_UserProfile", (UserProfile)Model.UserProfile ?? new UserProfile())