2010-05-01 3 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. Всегда проходят действительный идентификатор метода контроллера или
  2. использовать Int? параметр и объединить нуль перед вызовом GetMaterial (id).

Независимо от того, вы должны проверить нулевое значение для material. Итак:

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

Или (если вы всегда проходят надлежащий идентификатор):

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

Чтобы передать действительный идентификатор методу контроллера, вам нужен маршрут, который выглядит примерно так:

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)

(в контроллере)