0

そのため、Webフォームとmvcアプリケーションを組み合わせて、正しくルーティングしようとしています。デフォルトのルーティングは期待どおりに機能していますが、ビューの 1 つでアクションリンクをクリックすると、正しいページにルーティングされません。

これが私のルーティングコードです。

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

           routes.MapPageRoute("",
               "", "~/Default.aspx", true);

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



        }


        void Application_Start(object sender, EventArgs e)
        {
            // Code that runs on application startup

           AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

        }

クリックするアクション リンクは次のとおりです。@Html.ActionLink("Properties Editor", "Index", "Property")

これが私の期待される結果です:urlgoeshere.com/Property/Index

これが私の実際の結果です:urlgoeshere.com/?action=Index&controller=Property

この状況を改善するために何を変更すればよいかわかりません。何か案は?

4

2 に答える 2

2

結局、ルーティング制約を追加する必要がありました。これが私がやったことです。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

          routes.MapPageRoute("",
               "", "~/Default.aspx", true, null, new RouteValueDictionary { { "outgoing", new PageConstraint() } });


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

そしてページの制約。

public class PageConstraint : IRouteConstraint
    {
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            if (routeDirection == RouteDirection.IncomingRequest)
                return true;
            return false;
        }
    }
于 2013-04-18T15:05:18.857 に答える
0

一致する最初のルートが Default.aspx ルートであるため、URL "" でそれを使用している可能性があると思います。MVC では、提供されているがパスに含まれていないパラメーターはすべて、クエリ文字列値として自動的に追加されます。

ルートは定義された順にピックアップされるためroutes.MapPageRoute("", "", "~/Default.aspx", true);、デフォルト ルートの後に移動してみてください。これを行う場合は、コントローラーのデフォルトを削除する必要がある場合があります。そうしないと、このルートが URL "" に取得され、チップ コントローラーの Index アクションに渡されます。

于 2013-04-17T16:34:00.313 に答える