我正在运行VB.Net MVC 5站点,并创建了一个继承Controller类的MvcControllerBaseClass类。然后,所有控制器都将从该基类继承。
我正在使用此基类来定义路由,该路由使我们可以将与视图关联的javascript文件放置在与视图相同的目录中。
物理结构最终看起来像这样,例如:
/Views
/Example
Index.vbhtml
Index.js
ExampleController继承了MvcControllerBaseClass,在此示例中将使用的路由配置为:
/Example/Index
/Example/Scripts/Index.js
这是我正在使用的“ MvcControllerBaseClass.vb”文件:
Imports System.Web.Mvc
Imports xWebUI.JavaScriptViews
Imports System.IO
Namespace MyApp
Public Class MvcControllerBaseClass
Inherits Controller
' The full route path will be the RoutePrefix defined in the controller that inherits this class combined with the Route below, eg: Example/Scripts/somefile.js
<Route("Scripts/{filename}")>
Function Scripts(filename As String) As ActionResult
Dim ControllerName As String = System.Web.HttpContext.Current.Request.RequestContext.RouteData.Values("controller").ToString()
Dim filePath As String = Server.MapPath("~/Views/" & ControllerName & "/" & System.Web.HttpContext.Current.Request.RequestContext.RouteData.Values("id").ToString()) ' the real file path
Return Content(System.IO.File.ReadAllText(filePath), "text/javascript")
End Function
End Class
End Namespace
这是我正在使用的ExampleController.vb控制器文件:
Namespace MyApp
<RoutePrefix("Example")>
Public Class ExampleController
Inherits MvcControllerBaseClass
'/example/index
Function Index() As ActionResult
Return View()
End Function
End Class
End Namespace
在MvcControllerBaseClass文件中定义的/Example/Script/Index.js路由正在运行但没有达到预期的
“ filename”变量始终为Nothing,但路由定义<Route("Scripts/{filename}")>
表示文件名ID段是必需的字符串,并且当我浏览至{{时,实际上正在执行关联的方法Function Scripts(filename As String) As ActionResult
1}} 那文件名变量为什么没有呢?
我能够通过从routedata'id'值/Example/Scripts/Index.js
中提取文件名来解决此问题,但令我困扰的是文件名变量没有按预期填充,并且我不想后来因为它而遇到了任何无法预料的问题。
有人能看到为什么会这样吗?
也请注意: 如果我不使用基类,而是将基类中的逻辑直接放入控制器,那么文件名参数值就是我所期望的。我只是试图不必每次都将这段代码复制到每个控制器中。