2010-05-01 1 views
0
나는이있다 asp.net의 MVC에서 저장소 클래스가

,이 오류는 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

제안 사항 ...

답변

2

) 컨트롤러의

당신은 오류가 있습니다.

  1. 항상 컨트롤러 메소드에 유효한 ID를 전달하거나,
  2. int를 사용

    당신은 기본적으로 두 가지 옵션이 있습니다? 매개 변수를 사용하고 GetMaterial (id)을 호출하기 전에 null을 병합합니다.

material에 대한 null 값을 확인해야합니다. 그래서 :

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 
0

이것은 param (int id)에 null이 전달되었음을 의미합니다. use (int? ID)는 컨트롤러 메소드에 ID를 통과하지 있기 때문에 (