ASP.NET MVC HTML.ActionLink () 문제
-
03-07-2019 - |
문제
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와는 다릅니다.