2011-04-30 6 views
6

VS 2010, .NET 4.0 및 MVC 3의 최신 버전이 있으며 vb를 사용할 때 asp.net mvc 3의 영역을 사용하는 데 문제가 있습니다. 그물.vb.net을 사용하여 asp.net mvc 3의 영역에서 뷰를로드 할 수 없습니다.

나는 다음을 수행하십시오

  1. 가 새로운 Visual Basic의 asp.net MVC 3 프로젝트를 만듭니다. Razor를 "View Engin"으로 선택하고 "TestApp"프로젝트를 호출하십시오.
  2. "Test"라는 새 영역을 만들면/Areas/Test 폴더에 있습니다.
  3. 가/지역에서 "PageController.vb"이라는 빈 컨트롤러를 추가/테스트/컨트롤러/페이지 "".
  4. 는/지역/테스트/조회/전화에 새 폴더를 추가 "를 선택합니다.
  5. 새로운 추가/Areas/Test/Views/Page에서 "Index.vbhtml"이라는 빈보기
  6. "http : // localhost : xyz/Test/Page"라는 URL을 브라우저에 수동으로 입력하십시오. xyz는 VS에 의해 생성 된 자동으로 추가 된 포트 번호입니다.

7 단계에서 나는 "리소스 ca 찾을 수 없습니다. "

C#을 사용하여 정확히 동일한 작업을 수행하면 올바른 페이지로 이동하여 "색인"이라는 단어가 예상대로 표시됩니다.

이 버그입니까? 아니면 뭔가 빠졌습니까? 이 문제를 해결하기 위해 몇 시간 동안 웹을 검색했지만 지금은 얻고 있습니다.

인 자동으로 생성 TestAreaRegistration.vb 파일 네임 스페이스 공공 클래스 TestAreaRegistration 상속은

Public Overrides ReadOnly Property AreaName() As String 
     Get 
      Return "Test" 
     End Get 
    End Property 

    Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext) 
     context.MapRoute(_ 
      "Test_default", _ 
      "Test/{controller}/{action}/{id}", _ 
      New With {.action = "Index", .id = UrlParameter.Optional} _ 
     ) 
    End Sub 
End Class 

최종 네임 스페이스

을 AreaRegistration 그리고 이것은 자동으로 생성 Global.ascx 파일입니다 TestApp.Areas.Test : '참고 : IIS6 또는 IIS7 기본 모드 사용 설정 방법에 대한 안내는 '방문 http://go.microsoft.com/?LinkId=9394802

,363,210

공공 클래스 MvcApplication 상속 System.Web.HttpApplication

Shared Sub RegisterGlobalFilters(ByVal filters As GlobalFilterCollection) 
    filters.Add(New HandleErrorAttribute()) 
End Sub 

Shared Sub RegisterRoutes(ByVal routes As RouteCollection) 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

    ' MapRoute takes the following parameters, in order: 
    ' (1) Route name 
    ' (2) URL with parameters 
    ' (3) Parameter defaults 
    routes.MapRoute(_ 
     "Default", _ 
     "{controller}/{action}/{id}", _ 
     New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _ 
    ) 

End Sub 

Sub Application_Start() 
    AreaRegistration.RegisterAllAreas() 

    RegisterGlobalFilters(GlobalFilters.Filters) 
    RegisterRoutes(RouteTable.Routes) 
End Sub 

최종 클래스

이들은 당신 repete 1-7 단계를 경우 얻을 및 C#을 사용하는 것과 동일하다 (유일한 차이점은 당신 것입니다 위의 vb.net 코드와 동일한 C# 코드를 얻습니다.)

나는 repete : 나는 C#에서 1 - 7 단계를 수행하면 작동하지만 vb.net에서 작동하지 않습니다! 뭐가 잘못 되었 니?

답변

7

문제는 컨트롤러가 기본 컨트롤러 네임 스페이스에 없다는 것입니다. 컨트롤러 네임 스페이스를 수동으로 직접 참조해야합니다. 이것에 과부하가 있습니다. 시도해보십시오.

Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext) 
     context.MapRoute(_ 
      "Test_default", _ 
      "Test/{controller}/{action}/{id}", _ 
      New With {.action = "Index", .id = UrlParameter.Optional}, _ 
      New With {"MyDefaultNamespace/Areas/Test/Controllers"} _ 
     ) 
End Sub 

기본 영역 구성 파일은 실제로 해당 영역의 컨트롤러 네임 스페이스를 참조하지 않습니다. 이것은 불행한 감독입니다.따라서 이전 컨트롤러를 새 폴더로 복사하지 않고 이전 네임 스페이스를 유지하지 않으면 처음에 오류가 발생합니다. 올바른 네임 스페이스를 참조하면이 문제가 해결됩니다.

편집 : 또한

,이 오타입니다 ... 당신의 페이지에 대한 작업을 만드는 방법에 대해 아무것도 언급하지 않았거나 컨트롤러가 기본적으로 하나 왔는가?

+1

빈 컨트롤러를 만들 때 얻는 기본 동작 방법을 사용 했으므로 사용하지 않았습니다. 나를 올바른 방향으로 인도 해 주셔서 감사합니다! 나는 두 샘플 프로젝트를 나란히 놓고 C#과 vb.net 프로젝트 사이에 차이가 있는지 알아 보았고 이제는 "PageController.vb"와 "PageController"에 비해 "Namespace"의 차이가 있음을 확인했습니다 .cs ". mvc 3의 vb.net 버전이 올바른 네임 스페이스 정의를 추가하는 것을 잊었으며이 문제를 해결할 때 모든 것이 작동하기 시작했습니다! – Thomas

+0

예! 몇 시간의 혼란 스러움, 그리고 내가해야만하는 일은 각각의 자동 생성 컨트롤러에 네임 스페이스를 수정하는 것이 었습니다. 고맙습니다!! – user158017

+1

이 답변은 올바른 길을 찾아 줬지만, 네 번째 매개 변수의 구문이 약간 벗어난 것처럼 보입니다. 좀 더 다음과 같아야합니다. namespace : = { "MyDefaultNamespace.Areas.Test.Controllers"} 또는 적어도 나를 위해 일한 것이지요. 내 영역 컨트롤러가이 네임 스페이스에 없더라도 특별히 범위를 지정하고이 매개 변수를 추가하면 모든 것이 내 VB.NET MVC 4 웹 응용 프로그램에서 작동했습니다. – bkwdesign

관련 문제