Исключение MVC 3: словарь параметров содержит нулевую запись для параметра 'id' ненулевого типа 'System. Int32' для метода ' System.Сеть.В MVC
Мое приложение, кажется, работает нормально, но я продолжаю получать эти исключения в журналах log4net:
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Agency(Int32)' in 'COPSGMIS.Controllers.QuestionController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Не уверен, что идет не так?
Мой контроллер:
public ActionResult Agency(int id)
{
QuestionDAL qd = new QuestionDAL();
var agency = qd.GetAgencyDetails(id);
agency.Reviews = qd.GetAgencyReviews(id);
return View(agency);
}
Мои маршруты:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
1 ответ:
Эта ошибка возникает, если вы пытаетесь вызвать это действие контроллера и не указываете
id
ни в части пути, ни в качестве параметра строки запроса. Поскольку ваше действие контроллера принимает идентификатор в качестве параметра, вы должны убедиться, что вы всегда указываете этот параметр.Убедитесь, что при запросе этого действия вы указали допустимый
id
в url:http://example.com/somecontroller/agency/123
Если вы создаете якорь, убедитесь, что есть идентификатор:
@Html.ActionLink("click me", "agency", new { id = "123" })
Если вы посылаете запрос AJAX, также убедитесь, что идентификатор присутствует в url.
Если, с другой стороны, параметр необязателен, вы можете сделать его целым числом с возможностью обнуления:
public ActionResult Agency(int? id)
Но в этом случае вам придется обрабатывать случай, когда значение параметра не указано.