4

別のモデル タイプ B のプロパティを持つモデル A があります。A に関連付けられたビューがあります。タイプ B のモデルを取る A に部分ビューを追加したいです。これが私のコードです。

public class ModelA
{
    public bool Prop1 {get;set;}
    public bool Prop2 {get; set;}
    public Dictionary<int, string> Prop3{get; set;}
    public int Prop4 {get; set;}
    public ModelB Prop5 { get; set; }


    public ModelA ()
    {
        Prop5 = null;

       ... more code ...
    }
}

//This view is tied to ModelA
@using (Html.BeginForm("CreateReport", "Home", FormMethod.Post))
{
   some markup
}

//this is the problem
@Html.Partial("FileLinks",  Model.Prop5) //This line throws an error 

エラー: ディクショナリに渡されたモデル アイテムのタイプは 'ModelA' ですが、このディクショナリにはタイプ 'ModelB' のモデル アイテムが必要です

に変更すると、行が機能します@Html.Partial("FileLinks", new ModelB())

元のコードが機能しないのはなぜですか? プロパティのタイプは ModelB です。

どんな助けでも感謝します!

更新: Controller からいくつかのコードを追加するのを忘れていました

m.FileLinks = new ModelB() return View("インデックス", m)

したがって、モデルはnullではありません

4

2 に答える 2

4

これを試してみましたが、Prop5 が null の場合、同じエラーが発生します。Prop5 を新しい ModelB に初期化すると、機能します。

エラーはあまり明確ではありません (これにより NullReferenceException がスローされると思われるでしょう)。

私もこれを試しました:

@Html.Parial("FileLinks",null)

となり、同じエラーが発生します。これはこれと同じ問題のようです

于 2013-05-16T17:02:27.813 に答える
0

ここで起こっていると思うことは

このような部分ビューをレンダリングするViewDataDictionaryと、ビュー コンテキストが部分ビューに渡される
ため、ModelBが null の場合ViewDataDictionary<TModel>は変更されず、実行時に MVC エンジンはnull値からモデルのタイプを判断できません。

于 2013-05-16T17:21:40.303 に答える