ASP.NET MVC 옵션 인 Args가있는 사용자 정의 경로
-
05-07-2019 - |
문제
나는 두 개의 선택적인 args가있는 경로를 원한다. 다음이 효과가 있다고 생각했습니다.
routes.MapRoute(
"ProductForm",
"products/{action}/{vendor_id}_{category_id}",
new { controller = "Products", action = "Index", vendor_id = "", category_id = "" },
new { action = @"Create|Edit" }
);
그러나 그것은 둘 다만 작동합니다 vendor_id
그리고 category_id
제공된다; 사용 RouteDebug
내가 볼 /products/create/_3
내 경로를 트리거하지 않으므로 다른 두 경로를 추가했습니다.
routes.MapRoute(
"ProductForm1",
"{controller}/{action}/_{category_id}",
new { controller = "Home", action = "Index", category_id = "" },
new { controller = "Products", action = @"Create|Edit" }
);
routes.MapRoute(
"ProductForm2",
"{controller}/{action}/{vendor_id}_",
new { controller = "Home", action = "Index", vendor_id = "" },
new { controller = "Products", action = @"Create|Edit" }
);
따라서 질문 :
세 개의 경로를 사용하는 것은 옵션 인 Args로 경로를 만들 수있는 유일한 방법입니까?
이 URL은 괜찮습니까? 즉, 더 나은 방법을 제안 하시겠습니까?
해결책
vendor_id를 기본값 (즉, 지정되지 않은 경우 0)을 제공하려고하는 이유는 무엇입니까?
routes.MapRoute("ProductForm","products/{action}/{vendor_id}_{category_id}",
new { controller = "Products", action = "Index", vendor_id = "0", category_id = "" },
new { action = @"Create|Edit" });
다른 팁
나에게는 좋아 보이지만 조금 다르게 할 것입니다.
routes.MapRoute(
"ProductForm1",
"product/category/{category_id}",
new { controller = "Home", action = "Index", category_id = "" },
new { controller = "Products", action = @"Create|Edit" }
);
그리고
routes.MapRoute(
"ProductForm1",
"product/details/{product_id}",
new { controller = "Home", action = "Index", product_id = "" },
new { controller = "Products", action = @"Create|Edit" }
);
그런 다음 수업은 다음과 같습니다.
ActionResults Index(){}
ActionResults Index(int category_id){// get categories}
ActionResults Index(int product_id){ // get products}
하지만 그게 나뿐입니다
다음과 같이 시도 할 수 있습니다.
routes.MapRoute(
"ProductForm",
"products/{action}/{arg1}/{arg1_id}/{arg2}/{arg2_id}",
new { controller = "Products", action = "Index", arg1 = "", arg2 = "", arg1_id = "", arg2_id = "" },
new { action = @"Create|Edit" });
그런 다음 ACTIONRESULT 메소드에서 논리를 만들어 ARG1 및 ARG2를 확인하고 Wich 인수가 전달되었음을 식별합니다.
ActionLink URL은 다음과 같습니다.
/products/create/vendor/10
/products/create/category/20
/products/create/vendor/10/category/20
/products/create/category/20/vendor/10
개인적으로 나는 경로가 깨끗하지 않은 것처럼 보이지만 당신이 달성하고자하는 것을 주어야하기 때문에 이것을 좋아하지 않습니다.
제휴하지 않습니다 StackOverflow