无法使用vb.net在asp.net mvc 3中加载区域视图

本文关键字:net 加载 视图 区域 mvc vb asp | 更新日期: 2023-09-27 17:54:11

我有最新版本的VS 2010, .net 4.0和MVC 3,我在使用vb.net时使用asp.net MVC 3的区域有问题。

我做了以下事情:

    创建一个新的visual basic asp.net mvc 3项目。选择Razor作为"View engine",并将项目命名为"TestApp"。
  1. 创建一个名为Test的新区域,它将位于文件夹:/Areas/Test。
  2. 在/Areas/Test/Controllers/中添加一个名为"PageController.vb"的空控制器。
  3. 在/Areas/Test/Views/中新建一个名为Page的文件夹。
  4. 添加一个名为"Index"的新空视图。vbhtml" in/Areas/Test/Views/Page.
  5. 在浏览器中手动输入url"http://localhost:xyz/Test/Page",其中xyz是VS.自动添加的端口号。

在第7步,我得到消息" the resource cannot be found"。

如果我用c#做同样的事情,那么我将得到正确的页面,它将显示单词"Index",如预期的。

这是一个错误,还是我错过了什么?我已经在网上浏览了几个小时试图解决这个问题,但我现在意识不到。

这是自动创建的testareareregistration .vb文件名称空间TestApp.Areas.Test公共类testareregistration继承AreaRegistration

    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

结束名称空间

这是自动创建的全局。ascx文件:注:有关启用IIS6或IIS7经典模式的说明,请参阅访问http://go.microsoft.com/?LinkId=9394802

公共类mvapplication继承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

结束课

如果你重复步骤1-7并使用c#,这些与你得到的相同(唯一的区别是你将得到的c#代码等于上面的vb.net代码)。

我重复:如果我在c#中执行步骤1-7,它可以工作,但它不会在vb.net中工作!怎么了?

无法使用vb.net在asp.net mvc 3中加载区域视图

问题是你的控制器不在默认的控制器命名空间中。您需要自己手动引用控制器名称空间。这是一个过载。试试这个:

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

默认的区域配置文件实际上并没有引用该区域的控制器命名空间。这是一个不幸的疏忽。因此,除非您将旧的控制器复制到新文件夹中(并保留旧的名称空间),否则您将在第一次尝试时得到一个错误。引用正确的命名空间将修复此问题。

编辑:

还有,你没有提到任何关于为你的页面创建一个操作…这是一个打字错误,还是控制器默认自带一个?