0

ここで与えられた受け入れられた回答についてフォローアップの質問があります: Two models in one view in ASP MVC 3

タイプ、原因、場所の 3 つのモデルがあり、それらの内容を 1 つのビューに一覧表示します。上記のリンクの回答に基づいて、次のような を組み合わせた新しいモデルを作成しました。

public class Combined
    {
        public IEnumerable<Place> Place { get; set; }
        public IEnumerable<Type> Type { get; set; }
        public IEnumerable<Cause> Cause { get; set; }
    }

IEnumerable<> にしたのは、私が理解しているように、これらのモデルの内容を foreach ループでリストしたいだけの場合に必要だからです。次に、ビュー用にこのコントローラーを作成しました。

[ChildActionOnly]
    public ActionResult overSightHeadings()
    {
        Combined Combined = new Combined();
        return View(Combined);
    }

そして最後にビュー(最初にテーブルの1つからリストしようとしていました):

@model mvcAvvikelser.Models.Combined
@{
    Layout = null;
}
<tr>
@foreach (var Type in Model.Type)
{
    <th> @Html.DisplayTextFor(ModelItem => Type.Name)</th>
}
</tr>

このコードの問題は、foreach コードの開始時に null 例外が発生することです。

System.NullReferenceException: Object reference not set to an instance of an object.

したがって、ここで何が間違っているのか完全にはわかりません.IEnumerableではないはずです.コントローラーでモデルを誤って初期化したのでしょうか?

4

2 に答える 2

1

これのはず

[ChildActionOnly]
public ActionResult overSightHeadings()
{
    Combined combined = new Combined();
    combined.Types = new List<Type>();
    combined.Causes = new List<Cause>();
    combined.Places = new List<Place>();

    return View(Combined);
}

プロパティ名を複数形に変更したことに注意してください。これにより、プロパティがコレクションとして定義されます。

于 2012-09-19T07:54:34.190 に答える
0

のように見える

 public IEnumerable<Type> Type { get; set; }

設定されていません

IEnumerable のようなモデル コンストラクターでこのリストを初期化しようとします。

 List<Type> Type = new List<Type>();
于 2012-09-19T07:48:50.967 に答える