1

部門名と製品名に基づいてカスタマイズされたルーティングが必要です。例: /mobiles/nokia-6303

製品ページを呼び出すと、正常に機能しています。コントローラーに続いてデフォルトでホームページのような製品ページ以外を呼び出し、アクションメソッドが実行されている場合

defaults: new { controller = "ContentPage", action = "ProductDetail" }

この問題を回避するには?

routes.MapRoute(
name: "ProductDetailsPage",
url: "/{DepartmentName}/{ProductName}",
defaults: new { controller = "ContentPage", action = "ProductDetail" }
);  

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

よろしくお願いします

4

4 に答える 4

2

あなたのルートはまったく同じです。/DepartmentName/ProductNameとを区別することは不可能/Controller/Actionです。2 つのことを区別するために、URL に別のものが必要です。

routes.MapRoute(
    name: "ProductDetailsPage",
    url: "/Products/{DepartmentName}/{ProductName}",
    defaults: new { controller = "ContentPage", action = "ProductDetail" }
);  

そして、/products/departmentname/productname に移動します

于 2013-09-03T10:16:52.663 に答える
0

おそらく、Ant P の優れた提案を少し変更すると、部門名と製品名の間にテキストを配置することになるでしょうか?

routes.MapRoute(
    name: "ProductDetailsPage",
    url: "/{DepartmentName}/Products/{ProductName}",
    defaults: new { controller = "ContentPage", action = "ProductDetail" }
); 

または、後で詳細を確認するには:

routes.MapRoute(
    name: "ProductDetailsPage",
    url: "/{DepartmentName}/{ProductName}/details",
    defaults: new { controller = "ContentPage", action = "ProductDetail" }
); 

これらの URL アプローチはいずれも、URL 内にある程度の関連情報が含まれているため、「SEO チーム」を通過する可能性があります。

于 2013-09-03T14:00:43.843 に答える