Что говорит эта ошибка в asp.net-mvc? - PullRequest
0 голосов
/ 01 мая 2010

У меня есть класс репозитория в 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 ]

2 голосов
/ 01 мая 2010

Вы получаете ошибку, потому что вы не передаете идентификатор методу контроллера.

У вас есть два варианта:

  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 голосов
/ 01 мая 2010

Это означает, что параметру (int id) был передан ноль, используйте (int? Id)

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

...