Asp.net mvc 为什么我的覆盖函数不覆盖?
VS2103,MVC5,VB 我要做的是:保留模板化MVC5控制器和Model.vb文件,而不更改模板化方法中的代码,并将所有方法更改保留在单独的文件中 这篇文章是根据以下4条评论编辑的: 为了复制我所看到的,启动一个新的MVC5项目。然后按如下所示编辑HomeController.vb文件,只需将Overridable添加到函数索引中即可Asp.net mvc 为什么我的覆盖函数不覆盖?,asp.net-mvc,vb.net,Asp.net Mvc,Vb.net,VS2103,MVC5,VB 我要做的是:保留模板化MVC5控制器和Model.vb文件,而不更改模板化方法中的代码,并将所有方法更改保留在单独的文件中 这篇文章是根据以下4条评论编辑的: 为了复制我所看到的,启动一个新的MVC5项目。然后按如下所示编辑HomeController.vb文件,只需将Overridable添加到函数索引中即可 Public Class HomeController Inherits System.Web.Mvc.Controller Overridable
Public Class HomeController
Inherits System.Web.Mvc.Controller
Overridable Function Index() As ActionResult
Return View()
End Function
Function About() As ActionResult
ViewData("Message") = "Your application description page."
Return View()
End Function
Function Contact() As ActionResult
ViewData("Message") = "Your contact page."
Return View()
End Function
End Class
然后添加名为HomeControllerOverrides.vb的文件,如下所示:
Public Class OverridesToHomeController
Inherits HomeController
Overrides Function Index() As ActionResult
Return View()
End Function
End Class
您必须在第二个文件中为Index方法创建一个视图
运行程序时,不会执行覆盖函数,只执行原始函数
致以最良好的祝愿,
Alan看看你的global.asax,应该有一个将url映射到控制器的部分
routes.MapRoute( _
"MainPage", _
"", _
New With {.controller = "Home", .action = "Index"} _
)
或
如果您有默认控制器。它将使用第一个文件夹名称作为控制器名称,或使用主文件夹作为默认名称。您需要重命名HomeController->HomeControllerBase和HomeControllerOverrides->HomeController。调用的控制器取决于页面的设置方式
根据它的设置方式,您可以访问新类。您的对象是否可能不是
家庭控制器,而实际上是家庭控制器?这是我能想到的唯一解释。我们需要查看创建和调用对象的代码。请尝试重命名HomeController->HomeControllerBase和HomeControllerOverrides->HomeController。调用的控制器取决于页面的设置方式。在我看来,您试图做的是错误的。你认为做这样的事能得到什么?如果我没弄错的话,控制器的名字必须以“controller”结尾。MVC在许多情况下使用约定优于配置,这是约定之一。看看你的路线。当有人导航到“Home/Index”URL时,您如何具体指定要使用的URL?@j.i.h感谢您的关注。我将帖子改为只使用MVC5模板,以确保我所做的一切都能被看到。行吗?谢谢你的解释。问题似乎是我在受默认值影响的一个控制器上尝试了我的第一个命名方法,如上所示。我喜欢你的命名建议,并将使用它,但我会回去检查一个控制器,它不是默认的方式,我一开始这样做只是为了自己确认,将工作在控制器以外的家庭。谢谢!
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
)