0

次のルートが定義されています。

context.MapRoute("routeCreate", "{aval}/anArea/aController/Create/{val.Id}", new { action = "Create", controller = "aController" });

次のキャッチオールルートが定義されるまで、どの機能が機能しますか:

context.MapRoute("catchallCreate", "{aval}/anArea/{controller}/Create/", new { action = "Create"});

ルートは次によって呼び出されます。

RedirectToAction("Create", new {val.Id});

結果の URL は /1 ではなく ?Id=1 になり、「val」を取得していないようです。もう一部。

そのパラメーター構文で制約を作成できないため、{val.Id} の使用に問題がある可能性があると考えています。

アップデート:

次のルートが定義されているので、まだ何かが足りないのかもしれません

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.Routes.Add(
            new Route(
                "{aval}/anArea/aController/Create/{val.Id}",
                new RouteValueDictionary()
                    {
                        { "action", "Create" },
                        { "controller", "aController" },
                        { "val.Id", UrlParameter.Optional }
                    },
                null,
                new RouteValueDictionary() { { "area", "anArea" } },
                new MvcRouteHandler()));
// catchall
context.MapRoute("Create", "{aVal}/anArea/{controller}/Create", new { action = "Create" });

Optional を削除しても機能しません。最初のルートは、キャッチオールが削除された場合にのみ機能します。

4

2 に答える 2

0

ルートが定義される順序は重要です。catchallCreateしたがって、 afterを定義する必要がありますrouteCreate

他に考えられるのは、val.Id をオプションとして定義することです。

routes.Add(new Route("{aval}/anArea/aController/Create/{val.Id}",
                     new RouteValueDictionary()
                         {
                             {"action", "Create"},
                             {"controller", "aController"},
                             {"val.Id", UrlParameter.Optional}
                         },
                     new MvcRouteHandler()));
于 2012-10-15T22:31:37.133 に答える
0

私は最近、同様の状況に遭遇しました。これは、すべての検索で見つけた最も近いものでした。

私の問題は、ドット付きパラメーターのデフォルトを提供しようとしたことに起因する問題でした。私にとってうまくいったのは次のとおりです。

context.MapRoute("routeCreate", 
                 "{aval}/anArea/aController/Create/{val.Id}",
                 new 
                 {
                    action = "Create",
                    controller = "aController"
                 });

var route = (Route)context.Routes["routeCreate"];
route.Defaults.add("val.Id", UrlParameter.Optional);

他のコントローラーが他のエリアで同じ名前を共有しているため、他の回答のルート作成方法は機能しませんでした。

はい、これにより、スティーブが推奨するように、キャッチオールルートが不要になります。

于 2016-05-10T23:45:59.137 に答える