2016-06-25 2 views
0

, 나는 다음과 같은 매개 변수에 물음표를 얻을 :여러 매개 변수

http://localhost:57728/Home/AddAndManageProperties?BaseCategoryId=11&SubCategoryId=14

내가를 제거하려면 물음표는 다음과 같이 할 수 있습니다 :

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

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

     routes.MapRoute(
      name: "MyRout", 
      url: "{controller}/{action}/{BaseCategoryId}/{SubCategoryId}", 
      defaults: new { controller = "Home", action = "AddAndManageProperties", BaseCategoryId = UrlParameter.Optional, SubCategoryId = UrlParameter.Optional } 
     ); 


    } 
} 
: 여기

http://localhost:57728/Home/AddAndManageProperties/BaseCategoryId=11/SubCategoryId=14

내 코드입니다 16,

그리고 여기에는 작업 방법 :

public ActionResult AddAndManageProperties(int? BaseCategoryId, int? SubCategoryId) 
     { 
     } 

그리고 난 그래서 좀 도와주십시오 방법

[HttpPost] 
    public ActionResult AddSubCategory(SubCategory subCategory) 
    { 
     return RedirectToAction("AddAndManageProperties", new { BaseCategoryId = subCategory.BaseCategoryId, SubCategoryId = subCategory.SubCategoryId }); 
} 

내가 ASP.NET MVC 새로운 오전에 의해 메소드 AddAndManageProperties를 호출!

+0

먼저 'BaseCategoryId = UrlParameter.Optional, SubCategoryId = UrlParameter.Optional'을 제거해야합니다. 마지막 매개 변수 만 선택적 일 수 있습니다. 그런 다음 'url : "Home/AddAndManageProperties/{BaseCategoryId}/{SubCategoryId}"로 변경하고 기본 경로 앞에 이동하면 메소드에 일치하는 매개 변수 이름이 있다고 가정하여 작동합니다. –

+0

@StephenMuecke 도와 주셔서 대단히 감사합니다. 친절하게도 코드를 작성하여 이해할 수 있습니까? 죄송합니다. mvc에서 매우 새롭습니다. – Lucia

+0

먼저 AddAndManageProperties() 메소드의 서명을 포함하도록 질문을 편집하고 URL 생성 방법을 보여주십시오 (@Html.ActionLink()를 사용한다고 가정합니다.) –

답변

0
Default 경로 전에가되도록 MyRout를 이동하고 마지막 매개 변수 UrlParameter.Optional 그래서이 방법은 위의 대한

public ActionResult AddAndManageProperties(int BaseCategoryId, int SubCategoryId) 

할 필요가 표시 될 수 있습니다

routes.MapRoute(
    name: "MyRout", 
    url: "Home/AddAndManageProperties/{BaseCategoryId}/{SubCategoryId}", 
    defaults: new { controller = "Home", action = "AddAndManageProperties" } 
); 

참고로 변경

경로 또는

public ActionResult AddAndManageProperties(int BaseCategoryId, int? SubCategoryId) 

u는, 가장 중요한 것은 당신은 또한 텍스트 "BaseCategoryId"및 경로에서 "SubCategoryId"를 포함 할 경우,

defaults: new { controller = "Home", action = "AddAndManageProperties", SubCategoryId = UrlParameter.Optional } 

참고로 위의 경로 정의를 수정

url: "Home/AddAndManageProperties/BaseCategoryId/{BaseCategoryId}/SubCategoryId/{SubCategoryId}", 
+0

정말 감사합니다 :) 그것은 HTTP입니다 : // 로컬 호스트 : 57728/홈/AddAndManageProperties/17분의 14 내가 이렇게 할 수 있을까? http : // localhost : 57728/Home/AddAndManageProperties/BaseCategoryId/14/SubCategoryId/17 – Lucia

+0

확실히 - '홈/AddAndManageProperties/BaseCategory/{BaseCategoryId}/하위 카테고리/{SubCategoryId}'로 변경하십시오. 그리고 당신이 코멘트에 URL을 넣을 때, 백틱으로 그것을 둘러 쌉니다 :) –

+0

고맙습니다. 그러나 이것을 시도했지만 작동하지 않습니다. url : "Home/AddAndManageProperties/BaseCategory/{BaseCategoryId}/SubCategory/{SubCateg oryId}", 기본값 : new {controller = "Home", action = "AddAndManageProperties"} – Lucia

0

물음표는 쿼리 문자열에 사용되며, 이는 데이터가 작업에 필요한 매개 변수에 할당되는 방식이기 때문에 필수 항목입니다. 이를 제거하지 말아야하지만 [FromBody] 특성을 사용하여 쿼리 문자열의 매개 변수를 보낼 수는 없습니다.

0

첫째로 사용하고 경로의 순서가 잘못되어 잘못된 경로를 호출하는 여러 개의 가능한 URL이 있습니다. 자세한 내용은 Why map special routes first before common routes in asp.net mvc을 참조하십시오.

두 번째로, routes cannot contain more than one UrlParamter.Optional.

세 번째로 = 부호는 쿼리 문자열 인 unless it is encoded에서만 유효합니다. 그러나 IMO, 그들과 함께 오는 모든 두통을 피하려면 not use unsafe characters in a URL해야합니다. 이 경우 더 나은 대안은 =-으로 대체하는 것입니다.

마지막으로, 매개 변수를 선택적으로 설정하려면 특정 경로에서는 매개 변수를 허용하고 다른 매개 변수에서는 허용하지 않는 한 가지 방법이 있습니다 (provide multiple routes).

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

     routes.MapRoute(
       name: "BaseCategoryAndSubCategoryId", 
       url: "{controller}/{action}/BaseCategoryId-{BaseCategoryId}/SubCategoryId-{SubCategoryId}", 
       defaults: new { controller = "Home", action = "AddAndManageProperties" } 
     ); 

     routes.MapRoute(
      name: "BaseCategoryIdOnly", 
      url: "{controller}/{action}/BaseCategoryId-{BaseCategoryId}", 
      defaults: new { controller = "Home", action = "AddAndManageProperties" } 
     ); 

     routes.MapRoute(
      name: "SubCategoryIdOnly", 
      url: "{controller}/{action}/SubCategoryId-{SubCategoryId}", 
      defaults: new { controller = "Home", action = "AddAndManageProperties" } 
     ); 

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

참고 : 매개 변수 필요 URL에 전달 될 경우Stephen's answer 또한이 방법의 좋은 대안이다. IMO의 경우, 작동 방법이 작동하려면 두 매개 변수가 모두 필요한 경우 필요한 매개 변수를 사용하는 것이 더 합리적입니다.

하지만 가장 간단한 옵션은 단순히 쿼리 문자열을 사용하는 것입니다. 매개 변수는 당연히 옵션이 될 수 있으며 이렇게하면 임의의 순서로 추가되며, Default 이상의 경로는 필요하지 않습니다.

+0

정말 고마워요. :) 지금 당장 당신의 대답을 보았습니다. 신의 축복이있어. :) – Lucia