我在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
任何建议......
答案 0 :(得分:2)
您收到错误是因为您没有将id传递给控制器方法。
您基本上有两个选择:
无论如何,您应该检查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="" }
);
一个看起来像这样的网址:
http://MySite.com/MyController/GetMaterial/6 <-- id
答案 1 :(得分:0)
这意味着param(int id)传递了null,use(int?id)
(在控制器中)