문제

ASP.NET MVC를 이해하기 위해 간단한 응용 프로그램을 작성하기 위해 MVC 베타를 사용하고 있습니다. 응용 프로그램은 태깅이있는 간단한 사진/비디오 공유 사이트입니다. MVC 골격 프로젝트를 해결하고 있습니다. html.actionlink ()를 탐색 표시 줄에 추가했지만 한 지점에 추가 한 html.actionlink () 중 하나에 문제가 있습니다.

~/태그가 데이터베이스에서 모든 태그를 표시하기를 원하며 ~/tags/{tag}가 {tag}에 태그 된 모든 파일의 목록을 표시하기를 원합니다. 이것은 예상대로 작동하지만 ~/tags/{tag}를 따라 가면 탐색 막대의 html.actionLink ()가 ~/tags/{tag} 링크와 동일하게 ~를 가리키는 대신 ~를 가리 킵니다. /태그. ~/tags/{tag}를 따라갈 때 내비게이션 막대의 ActionLink ()가 왜 변경되는지 이해하지 못합니다. 프로젝트의 다른 링크로 이동하면 ActionLink ()가 예상대로 작동합니다.

이와 같이 ActionLink와 Route가 설정되어 있습니다. 내 tagscontroller에는이 색인 조치가 있습니다. int? 페이징 컨트롤입니다. 나는 두 가지 조회수가 있습니다. 하나는 모두 부르고 하나는 세부 사항이라고합니다. 내가 뭘 잘못하고 있죠?

        Html.ActionLink("Tags", "Index", "Tags") // In navigation bar

        routes.MapRoute(
            "Tags",
            "Tags/{tag}",
            new
            {
              controller = "Tags", action = "Index", tag = "",
            });

        public ActionResult Index(string tag, int? id )
        {  // short pseudocode
           If (tag == "")
             return View("All", model)
           else
             return View("Details", model) 
        }
도움이 되었습니까?

해결책

태그를 넣은 인스턴스를 처리해야한다고 생각합니다.

나는 다른 경로를 만들 것입니다 :

routes.MapRoute(
  "TagsIndex", //Called something different to prevent a conflict with your other route
  "Tags/",
  new { controller = "Tags", action = "Index" }
);

routes.MapRoute(
  "Tags",
  "Tags/{tag}",
  new { controller = "Tags", action = "Tag", tag = "" }
);


/* In your controller */
public ActionResult Index() // You could add in the id, if you're doing paging here
{
  return View("All", model);
}

public ActionResult Tag(string tag, int? id)
{
  if (string.IsNullOrEmpty(tag))
  {
    return RedirectToAction("Index");
  }

  return View("Details", model);
}

다른 팁

Dan Atkinson이 언급 한 것처럼 추가 경로를 작성하는 것 외에도 컨트롤러의 IF 문을 제거하고 태그 세부 사항을 처리하기 위해 다른 컨트롤러 메소드 (세부 사항)를 작성해야합니다. 코드 냄새가 표시되는 뷰를 결정하는 컨트롤러의 명령문이 있다면. 라우팅 엔진이 작업을 수행하도록하고 컨트롤러 코드가 더 간단하고 유지 관리가 쉬워집니다.

나는 당신이 이것을 처리하기 위해 Lamda 표현을 살펴 보는 것이 좋습니다. 앞으로 '태그 수프'로 끝날 수 있습니다.

또한 Microsoft.web.mvc DLL을 다운로드했는지 확인하십시오. System.web.mvc와는 다릅니다.

Microsoft.web.mvc.dll을 얻을 수 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top