2

Мое приложение работает нормально, но я продолжаю получать эти исключения в журналах log4net:MVC 3 исключение: словарь параметров содержит нулевую запись для параметра «id» типа, отличного от нуля, «System.Int32» для метода «System.Web.Mvc

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 
      ); 

     } 
+0

Вы можете сделать все параметры нулевыми и проверить нулевые значения, но это не идеальное решение. Гораздо лучше создать фильтр действий так, как он описан здесь: http://axelzarate.wordpress.com/2013/11/18/parameter-validation-in-asp-net-mvc-4/ –

ответ

5

Эта ошибка возникает, если вы пытаетесь вызвать это действие контроллера и не указать id либо в части пути или параметр строки запроса. Поскольку ваше действие контроллера принимает идентификатор как параметр, вы должны убедиться, что вы всегда указываете этот параметр.

Убедитесь, что когда вы запрашиваете это действие, которое вы указали действительный id в URL:

http://example.com/somecontroller/agency/123 

Если вы создаете якорь, убедитесь, что есть идентификатор:

@Html.ActionLink("click me", "agency", new { id = "123" }) 

Если вы отправляете запрос AJAX, убедитесь, что идентификатор присутствует в URL-адресе.

Если с другой стороны, параметр не является обязательным, вы могли бы сделать его обнуляемое целое:

public ActionResult Agency(int? id) 

, но в этом случае вам придется обрабатывать случай, когда не задано значение параметра.

+0

Число с нулевым значением в ваш ответ был очень полезен для меня (int? id) Спасибо @Darin – Catto