2

私のアプリケーションは正常に動作しているようですが、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
            );

        }
4

1 に答える 1

7

このエラーは、このコントローラー アクションを呼び出そうとしたときidに、パス部分またはクエリ文字列パラメーターのいずれかを指定しなかった場合にスローされます。コントローラー アクションはパラメーターとして id を受け取るため、常にこのパラメーターを指定する必要があります。

このアクションをリクエストするときはid、URLに有効な値を指定したことを確認してください。

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

アンカーを生成している場合は、id があることを確認してください。

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

AJAX リクエストを送信する場合は、ID が URL に含まれていることも確認してください。

一方、パラメーターがオプションの場合は、null 許容整数にすることができます。

public ActionResult Agency(int? id)

ただし、この場合、パラメーター値が指定されていない場合を処理する必要があります。

于 2013-03-11T17:06:50.583 に答える