MVC嵌套控制器和视图

3

我们的一些控制器变得过于庞大,因此我正在尝试通过重构简化它们,具体做法如下:

Areas
    Vehicles
        Controllers
            Cars
                CarController.cs
                Engines
                    PistonController.cs
                    ...
        Models
        Views
            Cars
                EditCar.ascx
                Engines
                    EditPiston.ascx
                    ShowPiston.ascx
    Animals
    ...

(与文件夹结构匹配的名称空间)

我已经尝试了几种方式,但无法使MVC推断出我的项目结构。

在操作中,局部视图返回的是什么?例如,EditPiston动作中简单地使用return PartialView(piston),希望使用Views-> Engines -> EditPiston.ascx视图,而不是Views-> Cars->Engines -> EditPiston.ascx

此外,在RegisterArea中需要做什么?是否需要设置特定的路由?

1个回答

1

按照标准惯例,您无法直接做到这一点。

当然,您可以直接指定视图位置。例如:

return View("~/Areas/Views/Vehicles/Cars/Engines/Piston.cshtml");

另一种选择是创建自己的视图引擎,该引擎派生自RazorViewEngine并添加更多搜索路径。但是您应该知道,每次页面呈现时都会搜索这些路径,如果有很多搜索路径,可能会显著降低性能。
创建自己的ViewEngine示例在此处: 我可以在ASP.NET MVC中指定自定义位置以“搜索视图”吗?

我还要指出,默认的VirtualPathProviders使用缓存机制来确定页面是否存在。因此,使用自定义ViewEngine可能会降低第一次搜索的性能,但之后性能会很小。 - Erik Philips
很不幸,我认为你是对的!我本来希望能够轻松完成,但看起来我做不到。 - Vman

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