문제

나는 두 개의 선택적인 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

개인적으로 나는 경로가 깨끗하지 않은 것처럼 보이지만 당신이 달성하고자하는 것을 주어야하기 때문에 이것을 좋아하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top