将ASP.NET MVC3控制器映射到视图

时间:2011-10-07 17:44:07

标签: c# asp.net-mvc-3

有没有办法将多个控制器映射到单个视图目录?在我的应用程序中,我想在控制器和视图之间进行1对1的映射。原因是每个视图都有各种ajax动作,控制器将为每个控制器提供方法,并且每个控制器有多个视图,这将导致控制器过大。

目前我有这样的事情:

/Controllers
    /Dir1Controller
   ...

/Views
    /Dir1
        /FirstView.cshtml
        /SecondView.cshtml
        ...

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

/Controllers
    /FirstController
    /SecondController
   ...

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

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

我看过使用区域,但他们似乎是针对吐出大型网站。从概念上讲,所有这些页面都应该属于同一区域。我只想保持控制器的大小。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

为什么不明确地返回视图?

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

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

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

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

return View(ViewPath);