2011-02-03 7 views
0

이름없이 매개 변수에 액세스해야합니다. 예 : 컨트롤러 테스트가 있는데 mysite.com/test/data에 "데이터"를 가져 오려고합니다. 액션 데이터를 호출하지 않고. 색인 작업을 통과하는 방법을 알고 있습니다.ASP.NET MVC 응용 프로그램의 URL을 통해 매개 변수 전달

public ActionResult Index(string id) 

"데이터"를 얻을 수 mysite.com/test/Index/data를 입력 난 단지 필요한 것,하지만 난 지수를 입력하고 싶지 않아 그런 식으로.

누구나 방법을 알고 있습니까?

편집 :

@andyc에게 감사드립니다.

AndyC 나는 당신이 말한 것을 사용하고 테스트를 만들었습니다. 작동했습니다 = D

이제 mysite.com/something을 입력 할 수 있으며 컨트롤러가 아닌 경우 내 프로필 페이지로 리디렉션됩니다.

합니다 (RegisterRoutes 방법 내부) 넣어, 당신의 Global.asax 파일에서 나를

routes.MapRoute(
     "Profile", 
     "{id}", 
     new { Controller = "Profile", action = "Index", id = UrlParameter.Optional } 
); 

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

답변

1

설정에 대한 사용자 지정 경로

무엇을 노력하고 있습니다 :

routes.MapRoute(
    "MyShortRoute", 
    "view/{id}", 
    new { Controller = "test", action = "Index" } 
); 

첫 번째에게 매개 변수는 이름이고 두 번째는 URL 형식이며 마지막 매개 변수는 기본값입니다 (이 경우 id를 비워두면 기본값은 0입니다.)

test/{id}는 test/Edit 와도 일치하므로주의하십시오. 여기서 edit는 매개 변수로 전달하지 않으려는 동작입니다 (이 문제를 피할 수있는 다른 방법은 생각할 수 없습니다.) 특히 매개 변수에 int 대신 문자열을 사용하는 경우).

global.asax 파일에서 경로를 적절하게 주문해야합니다. 더 구체적으로 경로 전에덜 구체적인 노선. 시스템이 취할 경로를 검색 할 때 가장 구체적인 일치 항목을 찾지 않고 상단에서 시작하여 찾은 첫 번째 일치 항목을 사용합니다.

따라서,이 나쁜 : 테스트 할 찾아 경우

이 예에서
routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "test", action = "Index", id = UrlParameter.Optional } 
); 
routes.MapRoute(
    "Specific", 
    "test/{id}", 
    new { controller = "test", action = "Index", id = 0 } 
); 

이 /가 당신에게 testcontroller과 someValue와 동작을주고, 당신이 원하는하지 첫 번째 항목을 일치합니다 someValue와 .

(더 구체적인 경로를 추가하면 가장 가까운 경로가 표시되기 때문에 기본값보다이 먼저 이됩니다.)

+0

감사합니다. 그게 효과가 있었어. routes.MapRoute ( "Profile", "Profile/{id}", new {컨트롤러 = "프로필", 동작 = "인덱스", id = UrlParameter.Optional} ); 다시 한 번 감사드립니다. – eestein

+0

남자 ...나는 의심의 여지가 하나있다. 아마도 나를 다시 구할 수있을 것이다. = D Profile/{id}를 사용하면 ProfileController 내부에서 액션을 호출 할 수 없다. (예 : 프로필/편집은 "편집"을 문자열 ID로 사용하고 호출 작업은 편집하지 않습니다.)이 문제를 해결할 수있는 방법이 있습니까? 다시 한번 감사드립니다. – eestein

+0

@eestein이 내 대답을 업데이트했습니다. 도움이 되었기를 바랍니다! – AndrewC