0

これを持つasp.net mvcにリポジトリクラスがあります。

 public Material GetMaterial(int id)
    {
        return db.Materials.SingleOrDefault(m => m.Mat_id == id);
    }

そして、私のコントローラーには、詳細なアクション結果についてこれがあります。

ConstructionRepository consRepository = new ConstructionRepository();
public ActionResult Details(int id)
    {
        Material material = consRepository.GetMaterial(id);
        return View();
    }

しかし、なぜこのエラーが発生するのか、

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(Int32)' in 'CrMVC.Controllers.MaterialsController'. To make a parameter optional its type should be either a reference type or a Nullable type. Parameter name: parameters

なにか提案を...

4

2 に答える 2

2

コントローラーメソッドにIDを渡していないため、エラーが発生しています。

基本的に次の 2 つのオプションがあります。

  1. 常に有効な ID をコントローラー メソッドに渡すか、または
  2. intを使用しますか?パラメータを取得し、GetMaterial(id) を呼び出す前に null を結合します。

とにかく、 の null 値を確認する必要がありますmaterial。そう:

public ActionResult Details(int? id) 
{ 
    Material material = consRepository.GetMaterial((int)(id ?? 0)); 
    if (id == null)
        return View("NotFound");
    return View(); 
}

または(常に適切なIDを渡すと仮定):

public ActionResult Details(int id) 
{ 
    Material material = consRepository.GetMaterial(id); 
    if (id == null)
        return View("NotFound");
    return View(); 
}

有効な ID をコントローラー メソッドに渡すには、次のようなルートが必要です。

 routes.MapRoute(
     "Default",
     "{controller}/{action}/{id}",
     new { controller = "Home", action = "Index", id="" }
 );

そして、次のような URL:

http://MySite.com/MyController/GetMaterial/6  <-- id
于 2010-05-01T06:32:46.667 に答える
0

これは、param (int id) に null が渡されたことを意味し、(int? id) を使用します。

(コントローラー内)

于 2010-05-01T06:28:33.317 に答える