我有最新版本的VS 2010,.NET 4.0和MVC 3,在使用vb.net时我在使用asp.net mvc 3中的区域时遇到了问题。
我执行以下操作:
在第7步,我收到消息“无法找到资源”。
如果我使用c#执行完全相同的操作,那么我将进入正确的页面,它将按预期显示“Index”一词。
这是一个错误,还是我错过了什么?我一直在扫描网络数小时试图解决这个问题,但我现在正在接受。
这是自动创建的TestAreaRegistration.vb文件 命名空间TestApp.Areas.Test 公共类TestAreaRegistration 继承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
结束命名空间
这是自动创建的Global.ascx文件: '注意:有关启用IIS6或IIS7经典模式的说明, '访问http://go.microsoft.com/?LinkId=9394802
Public Class 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
结束班
如果您重复步骤1-7并使用c#,那么这些与您获得的相同(唯一的区别是您将获得与上述vb.net代码相同的c#代码)。
我重复:如果我在C#中执行步骤1-7它可以工作,但它在vb.net中不起作用!有什么问题?
答案 0 :(得分: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
默认区域配置文件实际上并不引用区域的控制器名称空间。这是一个不幸的疏忽。因此,除非您将旧控制器复制到新文件夹(并保留旧命名空间),否则您将在第一时间收到错误。引用正确的命名空间将解决此问题。
修改强>
另外,你没有提到任何关于为你的页面创建动作的内容......这是一个错字,还是控制器默认带有一个?