2011-02-16 2 views
1

내 경로입니다 새로운 액션에 잘못된 라우팅 매개 변수를 보존리디렉션 여기

public class MessagesController 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    // GET: ~/Messages/1 
    public ActionResult ViewMessage(int message) 
    { 
     return View(// stuff to get message from repo); 
    } 

    [HttpPost] 
    // POST : ~/Messages/1/Delete 
    public ActionResult Delete(int message) 
    { 
     // do stuff 
     return RedirectToAction("Index"); 
    } 
} 

문제는 이후의 브라우저에서 URL입니다 Delete의 리디렉션은 내가 예상하는대로 ~/Messages/이 아니지만 대신 (message은 12라고 가정) ~/Messages/12/Index입니다.

색인에 message 매개 변수도 허용되지 않습니다. 나는 이것이 왜 일어나고 있는지 이해하지 못한다. 무엇을 바꾸어야합니까?

답변

0

'일반 메시지 작업'이

_routes.MapRoute(
    "Message-specific Actions", 
    "Messages/{action}/{message}", 
    new {controller = "Messages", action = "ViewMessage"}, 
    new {message = @"\d+"} 
    ); 

에 다음과 같은 규칙

_routes.MapRoute(
    "Message-specific Actions", 
    "Messages/{message}/{action}", 
    new {controller = "Messages", action = "ViewMessage"}, 
    new {message = @"\d+"} 
    ); 

를 교체하여 '메시지 특정 작업'경로의 순서를 전환 할 필요가 있다고 생각 그것은 작동합니다.

규칙을 작성하는 동안 마지막 매개 변수 만 선택적 일 수 있으며 필수 매개 변수는 전에 배치되어야한다는 것을 알아야합니다. 규칙을 변경하더라도 규칙 (수정 된 규칙)과 일치하지 않습니다. 정확한 이유는 없지만 1 차 (Messages [implicitly] 및 3 번째 매개 변수 [action])를 통과하면 {message} 역시 일치하지 않으므로 논리적이지 않습니다. 그래서이 규칙은이 stackoverflow question에서 논의 된 것처럼 시작 부분에 필수 매개 변수를 배치합니다.

0

난 당신이

+0

원하는'/ Messages/12' 대신'ViewMessage' 라우트의 URL이'/ Messages/ViewMessage? message = 12'가되기 때문에 이것은 도움이되지 않습니다. – adamjford