Исключение 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 2

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)

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