MVC 5中的VB.NET区域无法工作

3

使用Visual Studio 2013 Professional,创建一个新项目。

选择Visual Basic,然后选择Web,再选择Web应用程序。我选择了MVC。没有身份验证。创建。

然后我添加了一个名为“Test”的区域。一个名为“Test”的控制器和一个名为“Index”的视图。

按下F5键,项目构建并运行,但返回HTTP 404错误。

我重复了完全相同的步骤(字面上的相同步骤),只不过在创建Web应用程序时选择了C#而非Visual Basic。这次成功了。

是的,AreaRegistration.RegisterAllAreas()已被调用。这是一个默认的新项目,按照上述步骤进行操作,但它根本不起作用,而C#版本则可以。

为什么会这样,如何解决?我的客户需要使用VB.NET,而不是C#。

编辑 这里是RouteDebugger给出的信息:

Matches Current Request | Url | Defaults | Constraints | DataTokens

False | __browserLink/requestData/{requestId} (null) (null) (null) 

True  | Test/{controller}/{action}/{id} action = Index, id = UrlParameter.Optional (empty) Namespaces = WebApplication2.Areas.Test.*, area = Test, UseNamespaceFallback = False 

False | {resource}.axd/{*pathInfo} (null) (empty) (null) 

True  | {controller}/{action}/{id} controller = Home, action = Index, id = UrlParameter.Optional (empty) (empty) 

True | {*catchall} (null) (null) (null) 

structure


你在控制器中定义了ActionResult吗?如果你尝试右键点击ActionResult并点击“添加视图...”会发生什么?也许你的视图所在的文件夹结构不正确。 - Memet Olsen
正如我所提到的,我添加了一个名为“Test”的控制器。在其中,我右键单击了“Index” ActionResult 并添加了一个名为“Index”的视图。在 VB.NET 中的文件夹结构与 C# 版本完全相同。给自己留个好印象。打开 VS.NET 2013,重复我的步骤并查看。 - user3036342
你尝试过清除缓存吗? - kaybee99
我刚刚在两个并行运行的VS2013专业版实例上尝试了这个,一个是C#,另一个是VB.net;假设我已经精确地按照您的步骤进行了操作,我没有遇到您所描述的问题。您的浏览器打开了哪个URL?controllers文件夹中有哪些控制器? - Adrian Wragg
@AdrianWragg HomeController是自动生成的。我右键单击,添加了一个名为Test的区域,并在新区域的控制器文件夹下添加了一个控制器,名为Test。然后我右键单击,添加了一个名为Index的新视图(因为Index在控制器中默认创建),然后按下F5,它打开了http://localhost:port/Test/Test/Index。 - user3036342
显示剩余2条评论
2个回答

0

这与C#或VB.NET无关...我猜应用程序中没有其他控制器;如果您有一个名为TestController的控制器并且正在使用默认路由,则唯一可用的注册路由是test/test


这是一个默认创建的Web应用程序。因此,“HomeController”存在,因为它是安装的引导MVC5版本。我只是添加了一个区域。VB.NET项目会出现404错误,而以完全相同的方式/步骤创建的C#项目可以正常工作。为什么呢? - user3036342
它允许我选择MVC作为项目,仅此而已。不是空的。这是它们默认添加的引导程序内容。 - user3036342
我明白了...在“新建ASP.NET项目”对话框中,我通常选择“空”而不是“MVC”,但是在“添加文件夹和核心引用”下勾选小的“MVC”复选框,因为如果我从一个新项目开始,我只想添加我真正需要的东西... - Matze
奇怪的是,在路由调试器中,它实际上正确地“命中”了区域的路由... - user3036342
1
VB.NET不会自动将命名空间添加到区域中的控制器,这就是为什么它失败的原因。 - user3036342
显示剩余3条评论

0

感谢这篇文章:https://stackoverflow.com/a/25417592/3036342

它强调了默认情况下,VB.NET区域控制器不会自动添加必需的命名空间。在TestController中添加Namespace Areas.Test.Controllers后,它就可以工作了。

感谢微软让这成为一个如此困难和愚蠢的经历。


只是为了刁难一下...我已经检查了我的测试项目,它在我的TestController.vb上。 - Adrian Wragg
@AdrianWragg,你的代码为什么能够工作,我知道ReSharper可以自动修复这个问题,所以我问了一下它是否存在。 - user3036342
没有使用 ReSharper,但我已经安装了 MVC 5 脚手架。由于您的问题似乎是由于 VB 模板不正确导致的,安装该模板可能会解决问题。 - Adrian Wragg
@AdrianWragg 谢谢,我会尝试一下的。我已经向我的猫道歉了...可怜的小家伙... - user3036342

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接