2

私はMVC4を学習していますが、このURLにアクセスすると、コントローラーのEdit()メソッドに44の整数が渡されるはずだと理解しています。確かに、私がここに行くとき:

http://localhost:51921/TrackerJob/Edit/44

...このメソッドが呼び出されます:

public ActionResult Edit(int trackerJobId = -1)
{
    Debug.WriteLine(trackerJobId);
}

...ただし、パラメータは常に-1です。私はこれを別のプロジェクトで機能させましたが、何らかの理由で、このプロジェクトでは常に-1です。2つのプロジェクトの間に、1つが機能するプロジェクトと、この1つが失敗するプロジェクトの違いはわかりません。メソッドシグネチャをこれに変更すると、次のようになります。

public ActionResult Edit(int trackerJobId)
{
    Debug.WriteLine(trackerJobId);
}

エラーが発生します:

The parameters dictionary contains a null entry for parameter 'trackerJobId' of non-nullable type 'System.Int32'

何か案は?何をチェックすればいいのかわからない...

編集-リクエストに応じてルートを含む*

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
4

1 に答える 1

3

デフォルトのルーティングを使用する場合は、パラメータがと呼ばれていることを確認してくださいid

それ以外の場合は、次のような新しいルートを追加できます。

routes.MapRoute(
    name: "TrackerJob",
    url: "{controller}/{action}/{jobtrackerid}",
    defaults: new { controller = "TrackerJob", action = "Index", id = UrlParameter.Optional }
);

デフォルトルートの前にこのルートを追加してください。ルートの順序は非常に重要です!

がオプションかどうかはあなただけが知ってtrackerJobIdいます。

もっと凝ったものが必要な場合は、ルートを微調整して必要なものを作成できることに注意してください。

たとえばhttp://localhost:51921/TJ-E-44、編集用のようなURLが必要な場合、ルートは次のようになります。

routes.MapRoute(
    name: "TrackerJobEdit",
    url: "TJ-E-{jobtrackerid}",
    defaults: new { controller = "TrackerJob", action = "Edit", id = UrlParameter.Optional }
);

きっとあなたはその考えを理解するでしょう。

于 2012-08-21T23:03:49.320 に答える