映射ASP.NET mvc控制器到视图

本文关键字:视图 控制器 mvc ASP NET 映射 | 更新日期: 2023-09-27 18:10:53

是否有办法将多个控制器映射到单个视图目录?在我的应用程序中,我希望控制器和视图之间有一个1对1的映射。这样做的原因是,每个视图将有各种各样的ajax操作,控制器将为这些操作提供方法,并且每个控制器有多个视图将导致过大的控制器。

现在我有这样的东西:

/Controllers
    /Dir1Controller
   ...
/Views
    /Dir1
        /FirstView.cshtml
        /SecondView.cshtml
        ...

所以Dir1控制器映射到目录Dir1,需要为视图FirstView, SecondView等提供所有的动作。相反,我更喜欢这样:

/Controllers
    /FirstController
    /SecondController
   ...

两个控制器都映射到Dir1,但在执行操作时返回相应的视图。

这些似乎都不是路由映射方面的问题,但我似乎没有办法告诉它如何找到正确的视图。FirstController只会在/Views/First中查找视图。有什么办法我可以直接看/视图/Dir1?

我研究了使用区域,但它们似乎是针对大面积的吐槽。从概念上讲,所有这些页面都应该属于同一个区域。我只想让控制器的大小保持有限

映射ASP.NET mvc控制器到视图

如果您的Ajax调用与单个控制器相关,则坚持现有模式并在控制器中使用方法。如果可以重用,就把它们放在按目的组织的部分视图或控制器中,在执行Ajax调用时,只需请求控制器和操作。这是有原因的典型模式,为什么要跳出来呢?:)

为什么不直接返回视图呢?

return View("~/Controllers/FirstController/view.cshtml");

如果控制器中的所有操作都返回相同的视图,则在controller类的顶部使用常量,如:

public class myController
{
    private string ViewPath = "~/Controllers/FirstController/view.cshtml";
    ...

这样你只需要在每个控制器中设置一次到视图的路径。然后在每个动作方法中:

return View(ViewPath);