2016-03-22 4 views
2

ビューを実行しようとすると、NullReferenceExceptionが表示されます。 この問題の原因となるコードは表示されません。 誰かが問題を説明できますか? NullRef例外とNullReferenceExceptionコントローラ内のC#

public class Catalogus: ICatalogus 
{ 
    private readonly DbSet<Materiaal> materialen; 
    private IEnumerable<Materiaal> materialenTest; 
    private Firma firma; 

    public Catalogus() 
    { 
     firma = new Firma("hh", "[email protected]"); 
     materialenTest = new Materiaal[] { new Materiaal(5, 0, "1", "test", "test", "ts", firma, "wereldbol", "wereldbol", "lol", 0, true) }; 
    } 

    public IEnumerable<Materiaal> VindAlleMaterialen() 
    { 
     return materialenTest.OrderBy(m => m.Naam); 
    } 

    public IEnumerable<Materiaal> ZoekOpTrefwoord(string trefwoord) 
    { 
     IEnumerable<Materiaal> gefilterdMaterialen = materialenTest.Where(mat => mat.GetType().GetProperty("naam").GetValue(this).Equals(trefwoord)); 

     return gefilterdMaterialen; 
    } 
} 

コントローラ:

この行が問題の原因と感謝

これはモデルクラスです。

IEnumerable materialen = catalogus.VindAlleMaterialen()。OrderBy(m => m.Naam).ToList();

public class CatalogusController : Controller 
{ 
    private ICatalogus catalogus; 

    public CatalogusController() { } 

    public CatalogusController(ICatalogus catalogus) 
    { 
     this.catalogus = catalogus; 
    } 

    public ActionResult Index() 
    { 
     IEnumerable<Materiaal> materialen = catalogus.VindAlleMaterialen().OrderBy(m => m.Naam).ToList(); 

     return View(materialen); 
    } 
} 
+0

を、それがcatalogusを注入していないデフォルトのコンストラクタを呼び出し、または要素の一つがnullまたはnull 'Naam'を持っているいずれかのように見えます。 –

+0

コンストラクタにインタフェースパラメータを持つコントローラを持っていると、何らかのDIフレームワーク、おそらくNinjectを使用している可能性があります。このシナリオでは、セットアップに何か問題があります。デフォルトのコンストラクタを削除し、それが機能するかどうかを確認し、そうでない場合は、DIフレームワークのドキュメントを参照して、正しく構成されていることを確認してください。 –

+0

この行はどこですか* IEnumerable materialen = catalogus.VindAlleMaterialen()。OrderBy(m => m.Naam).ToList(); *上に掲載されたコードには??? –

答えて

7

catalogusインスタンスを作成しませんpublic CatalogusControllerあなたのデフォルトコンストラクタ。 catalogusがnullであるため、catalogus.VindAlleMaterialen().OrderBy(m => m.Naam).ToList();を実行するとNullReferenceExceptionが発生します。

オーバーロードされたコンストラクタが呼び出されている(おそらく大文字小文字が区別されていない)場合は、受信パラメータを検証する必要があります。

+0

デフォルトのコンストラクタがないと、 "MissingMethodException"が返されます。 –

+0

@ Dave_888 - おそらくDI(依存性注入)やIoCフレームワークを使用している可能性があります。おそらくあなたの 'Catalogus'を登録していないでしょう。それを使って 'ICatalogus'インスタンスをそのタイプに置き換えることができるように指定してください。その情報を追加する必要がある場合は、DIフレームワークと登録コードはどうすればいいですか? – Igor

+0

@ Dave_888 - デフォルトのコンストラクタに 'catalogus'の新しいインスタンスを作成し、これをプライベートフィールド' catalogus'に代入する必要があります。あなたが 'catalogus'インスタンスがnullの場合、あなたは' NullReferenceException'を取得しますそのプロパティ/メソッドにアクセスしてください。 – Igor

1

誰かがICatalogusオブジェクトを渡さずにCatalogusControllerを構築できるようです。誰かがcontroller.Index()を呼び出したときにこれはとNullReferenceExceptionが発生します。

// Create a controller object using the default constructor 
CatalogusController controller = new CatalogusController(); 

// this causes a NullReferenceException because controller.catalogus is null 
controller.Index();