언어 선택이 가능한 MVC4 프로젝트가 있습니다.
- ko
- nl
- fr
- 드
주요 부분 1 개 :
- 약
- 공통 (메뉴 용)
- 접촉
- 자주하는 질문
- 집
그리고 3 가지 영역 :
- 관리자
- 고객
- 가게
각 영역에는 하나 이상의 컨트롤러가 있습니다. 예를 들어 Admin 에는 index.aspx 페이지 가 포함 된 해당 뷰 폴더 개요 가있는 컨트롤러 개요 가 있습니다 .
홈페이지와 모든 메인 페이지 (about, faq 등)가 작동하며 방문 할 수 있습니다.
그러나 URL : localhost : xxxx / en / admin / overview를 따를 때 오류가 발생합니다.
‘/ en / admin / overview’경로에 대한 컨트롤러를 찾을 수 없거나 IController를 구현하지 않습니다.
경로가 정확하더라도 (Route Debugger로 확인할 수 있음) 오류 페이지에는 주 메뉴 항목을로드하려고 할 때 오류가 발생했다고 표시됩니다.
<nav id="site-navigation" class="eightcol">
@Html.Action("MenuItems", "Common")
</nav>
-관련성이 없기 때문에 코드 제거-
모든 것이 정상인 것 같지만 MVC는 메인 부분에있는 메뉴를로드 할 수없는 것 같습니다.
따라서 문제의 원인은 다음과 같습니다. 프로젝트의 주요 부분 (홈, 공통, 정보 등)에있는 컨트롤러에 영역 (예 : 관리자) 액세스 권한을 부여 할 수 있습니까?
답변
찾았습니다.
영역 내부에있는 페이지가이 영역 외부에있는 컨트롤러 (예 : 공유 레이아웃 페이지 또는 다른 영역 내부의 특정 페이지)에 액세스하려는 경우이 컨트롤러의 영역을 추가해야합니다. 공통 컨트롤러는 특정 영역이 아니라 주 프로젝트의 일부이므로 영역을 비워 두어야합니다.
@Html.Action("MenuItems", "Common", new {area="" })
레이아웃 페이지는 다양한 영역에서 공유되므로 위의 모든 작업 및 작업 링크에 추가해야합니다.
여기와 똑같은 문제입니다 :
공유 레이아웃이있는 ASP.NET MVC 영역
편집 : 명확하게 말하면 이것이 내 문제에 대한 답 이었기 때문에 답으로 표시되었습니다. 위의 답변은 동일한 오류를 유발하는 원인을 해결할 수 있습니다.
답변
제 경우에는 같은 오류가 Area와 관련이 없었지만 제 경우에 발생한 오류를 게시하려고 생각했습니다. “경로에 대한 컨트롤러를 찾을 수 없거나 IController를 구현하지 않습니다. “
_Layout.cshtml 파일의 잘못된 항목으로 인해 오류가 발생했습니다.
@Styles.Render("~/Content/misc")
해당 이름의 번들이 BundleConfig.cs에서 제거되었지만 _Layout.cshtml에서 제거하는 것을 잊었습니다.
바보 같았지만 우리 프로그래머들은 항상 바보 같은 실수를 많이 해요 🙂
답변
또한 위의 솔루션이 작동하지 않는 사람들을 위해 다음은 나를 위해 일한 것입니다.
여러 프로젝트에 대한 솔루션이 있습니다. 모든 프로젝트는 MVC3에있었습니다. 내 컴퓨터에 Visual Studio 2012를 설치했는데 일부 프로젝트가 MVC4로 자동 업그레이드 된 것 같습니다.
나는이 문제가있다
‘/ etc / etc’경로에 대한 컨트롤러를 찾을 수 없거나 IController를 구현하지 않습니다.
해당 경로를 처리 한 프로젝트가 MVC4를 가리키고 있었기 때문입니다.
MVC3를 사용하려면 참조를 수동으로 업데이트해야했습니다. 텍스트 편집기로 .csproj 파일을 열어서 그렇게 할 수도 있습니다. MVC3에 대한 참조를 찾고 다음 줄을 제거하십시오.
<SpecificVersion>False</SpecificVersion>
답변
이 오류의 또 다른 가능한 근본 원인은 영역 등록 클래스의 네임 스페이스가 컨트롤러의 네임 스페이스와 일치하지 않는 경우입니다.
예 : 컨트롤러 클래스에서 올바른 이름 지정 :
namespace MySystem.Areas.Customers
{
public class CustomersController : Controller
{
...
}
}
지역 등록 클래스에 잘못된 이름 지정 :
namespace MySystem.Areas.Shop
{
public class CustomersAreaRegistration : AreaRegistration
{
...
}
}
(위의 네임 스페이스는이어야합니다 MySystem.Areas.Customers
.)
코드 복사 및 붙여 넣기를 중지하는 방법을 배울 수 있습니까? 아마 아닐 것입니다.
답변
이 오류는 컨트롤러가 (이름에) 단어를 가지고 있어야한다는 사실로 인해 발생할 수도 있습니다 Controller
. 즉 : HomeController
; 자신의 ControllerFactory
.
답변
제 경우 문제는 컨트롤러 클래스가 공개적으로 발표되지 않았다는 것입니다.
class WorkPlaceController : Controller
해결책은
public class WorkPlaceController : Controller
답변
제 경우에는 namespaces
매개 변수가 컨트롤러의 네임 스페이스와 일치하지 않았습니다.
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "Web.Areas.Admin.Controllers" }
);
}