2010-02-09 5 views
3

내가 원하는 깨끗한 URL을 해결하기 및 정의하지 두 경로 : 경로가

[HttpPost] 
public ActionResult Search(string content, string query) 
{ 
    if (string.IsNullOrEmpty(query)) 
    { 
     return RedirectToAction("Home", "Application"); 
    } 
    return RedirectToAction("Search", new { content = content, query = query }); ; 
} 

public ActionResult Search(string content, string query, int? index) 
{ 
    if (string.IsNullOrEmpty(query)) 
    { 
     return RedirectToAction("Home", "Application"); 
    } 

    switch (content) 
    { 
     case "products": 
      // get products 
      return View("ResultsProducts"); 
     case "categories": 
      // get categories 
      return View("ResultsCategories"); 
     default: 
      // get all 
      return View("ResultsAll"); 
    } 
} 

이 난을 가지고 내 마스터 페이지에서 일반 검색 패널이 있습니다

routes.MapRoute(
    "Search", 
    "Search", 
    new { controller = "Search", action = "SearchPanel" } 
); 
routes.MapRoute(
    "SearchResults", 
    "Search/{content}", 
    new { controller = "Search", action = "Search", content = string.Empty, query = string.Empty, index = 0 } 
); 

후 나는 두 가지 작업이 텍스트 상자 및 제출 버튼. /Search에 게시됩니다. 텍스트 상자의 이름은 query입니다. 모두 좋고 위대한. Search에 첫 액션이 실행되지만 RedirectToAction()에 실패합니다.

제공된 값과 경로 테이블의 경로가 일치하지 않습니다.

왜 작동하지 않는 이유가없는 것 같습니다.

답변

2

두 번째 경로에서 content, queryindex을 기본값에서 제거하면 문제가 해결됩니다. 왜 내가 말할 수없는 이유는 기본값을 정의하기 때문이며, 내 경우에는 그렇지 않은 경우 기본값을 정의하기 때문입니다. 어쨌든 나는 그 값들을 제공하고 있습니다.

+0

MVC 릴리스 2로 업데이트 한 후 비슷한 문제가 발생했습니다. URL을 지정하는 페이지로 이동할 수 있지만 RedirectToAction ("ActionName")을 사용하려고하면 같은 오류가 발생합니다. "경로 테이블에 경로가 없습니다 ...."제 경우에는 경로 복제가 끝났습니다. 항목은 URL을 사용하여 작동하고 다른 매개 변수를 제거했으며 이제 RedirectToAction도 작동합니다. 아주 이상한 ....하지만 팁 주셔서 감사. – Rick

2

나는 똑같은 문제가 있었는데, 고맙게도이 덕분에 도움이되었으므로 뭔가를 돌려주고 싶습니다.

MVC 2 프레임 워크에서 다른 방식으로 경로를 선언하도록 변경 한 것 같습니다. 이 여분의 경로 값을 가질 수있는 (예를 들어, 내용)이 String.Empty로의 기본을 지정하지해야하지만, 오히려 그 때처럼 경로 평가 행동 할 수 있도록해야한다

content = UrlParameter.Optional 

이를 위해