1) localhost/ProductList/Product/1
routes.MapRoute(
"Product",
"ProductList/Product/{productId}",
new { controller = "ProductList", action = "Product"}
);
В контроллере "ProductList" создаете метод "Product", который принимает параметр "productId". В него MVC замапит переданный id продукта из урл localhost/ProductList/Product/{productId}.
localhost/ProductList/notebook
routes.MapRoute(
"ProductList",
"ProductList/{categoryName}",
new { controller = "ProductList", action = "Category",}
);
В контроллере "ProductList" создаете метод "Category", который принимает параметр "categoryName". В него MVC замапит переданный название категории из урл localhost/ProductList/{categoryName}.
2)Есть ли возможность привести URL на странице продукта к виду localhost/ProductList/notebook/1, а затем к localhost/ProductList/notebook/[ЧПУ_ноутбука] (ЧПУ находится в БД и находится по id)?
localhost/ProductList/notebook/1
routes.MapRoute(
"ProductFromId",
"ProductList/Product/{categoryName}/{productId}",
new { controller = "ProductList", action = "Product"},
new {productId = @"\d+" }
);
Тут "new {productId = @"\d+" }" выступает в роли ограничения, что id может быть только числом.
localhost/ProductList/notebook/[ЧПУ_ноутбука]
routes.MapRoute(
"ProductFromName",
"ProductList/Product/{categoryName}/{productName}",
new { controller = "ProductList", action = "ProductFromName"}
);
Можно совместить роуты, и определять на стороне контроллера что пришло, название продукта или id.
PS. Роуты нужно определять начиная с самого строгого. Иначе запросы будут мапится не на те роуты.