2012-07-31 2 views
0

기본 프로젝트 템플릿을 사용하여 MVC 3을 학습하는 중입니다. 상황은 잘되고 있지만 지금 컨트롤러를 구현하려고하는데 몇 가지 문제가 있습니다. 다음과 같이기본 프로젝트 템플릿을 사용하는 기본 MVC 라우팅 쿼리

 <header> 
     <div id="title"> 
      <h1>My MVC Application</h1> 
     </div> 
     <div id="logindisplay"> 
      @Html.Partial("_LogOnPartial") 
     </div> 
     <nav> 
      <ul id="menu"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.RouteLink("Contracts", "Contract")</li> 
       <li>@Html.ActionLink("About", "About", "Home")</li> 
      </ul> 
     </nav> 
    </header> 

내 global.asax.cs 파일은 다음과 같습니다 :

은 지금까지 나는 정의 지정된 경로로 새로운 링크를 위해 _Layout.cshtml 파일을 수정 한

 routes.MapRoute(
      "Contract", 
      "Contract", 
      new { controller = "Contract", action = "List", id = UrlParameter.Optional } 
     ); 

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

계약 컨트롤러에서 예상되는 동작보기를 반환하기 때문에 정상적으로 작동합니다.

그러나 목록 동작에 ID를 허용하도록 수정하고 싶습니다. 매개 변수를 받아들이려면 List 메서드를 변경해야하지만 거기에는 문제가 없지만 라우트에서 문제를 일으키고이 매개 변수를 _Layout.cshtml 파일의 RouteLink에서 List 메서드로 전달하는 방법을 알고 있습니다. 나는 몇 가지 시도를 해봤지만,이 비트는 정말 저를 뒤적 거리고 있습니다.

나는 AccountController를 통해 로그인 한 사용자의 ID를 전달하려고합니다. 그러나이 문제에 관해 계속해서 다른 질문을하겠습니다.

대단히 감사합니다.

답변

1

기본 경로는 패턴 컨트롤러/action/(여기에 선택적 id 매개 변수)에 해당하는 모든 컨트롤러와 작업에서 작동하므로 실제로 계약 경로가 필요하지 않습니다. 템플릿의 주석이 실제로는 Parameter defaults이라고 말합니다. 즉, 전달 된 Controller, Action 또는 ID가 없으면 기본값으로 설정됩니다. 그래서 웹 사이트의 루트를 탐색 할 수 있으며 홈 컨트롤러의 색인 작업이 기본 호출입니다. 경우,

[HttpGet] 
public ActionResult MyAction(int id) { 

} 

을하지만 : 경로를 사용하는 경우

, 당신은 예를 들어, 기본 경로는 현재이 작업을 수행 할 수 있습니다 .. 경로 매개 변수 이름은 당신의 행동에서 매개 변수 이름과 일치해야한다는 것을 기억해야합니다 당신이 이것을 할 기본 경로를 변경 :

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

..your 색인 더 이상 이에 대한 조치 변경해야 할 것입니다 .. 제대로 정수 매개 변수를 바인딩하지 않을 것이다 조치 :

0123을질문에 대한 대답에서

, 그것은 다른 두처럼 ActionLink를 사용하는 것이 더 적합 할 수 있습니다 당신은 이미 : 당신이 당신의 계약 경로를 제거하고 그냥 기본값을 사용하는 것이하지만 가정

@Html.ActionLink("Contracts", "Contract", "ActionMethodHere", new { id = UserIdHere }, null) 

노선.

+0

내 URL에 매개 변수를 표시하지 않으려면 ActionLink를 통해 매개 변수를 전달하여 기본 경로가 계속 작동합니까? – XN16

+0

맞습니다. 더 많은 매개 변수가 필요하면 별도의 경로를 만들어 더 많은 매개 변수를 허용하거나 쿼리 문자열에 전달하십시오. 이렇게하면 기본 경로가 그대로 유지되고 향후 컨트롤러가 예상대로 작동합니다. –

관련 문제