为什么我的覆盖功能没有覆盖?

时间:2014-12-02 19:51:17

标签: 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 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方法创建一个View。

运行程序时,不会执行覆盖功能,只执行原始功能。

最诚挚的问候, 艾伦

1 个答案:

答案 0 :(得分:0)

查看你的global.asax,应该有一个将url映射到控制器的部分

    routes.MapRoute( _
        "MainPage", _
        "", _
        New With {.controller = "Home", .action = "Index"} _
    )

    routes.MapRoute( _
        "Default", _
        "{controller}/{action}/{id}", _
        New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
    )

如果您有默认控制器。它将使用第一个文件夹名称作为控制器名称或使用Home作为默认值。你需要重命名HomeController - > HomeControllerBase和HomeControllerOverrides - > HomeController中。被调用的控制器取决于页面的设置方式。

根据设置的方式,您可以http://website.com/OverridesToHome完成新课程的访问。