从其他区域返回视图

Łuk*_*.pl 13 c# asp.net-mvc areas asp.net-mvc-2

我的ASP.NET MVC 2应用程序分为几个区域.其中一个是主目录中的默认区域,另一个是Account区域目录中的区域.现在,问题是我需要在这两个区域的控制器中使用相同的视图.

如果他们在同一个区域,我会return View("ViewName")这么做,但是我该怎样做才能从我所在地区的控制器中的默认区域返回一个视图Account?有任何想法吗?

Dar*_*rov 28

您可以指定视图的相对位置:

return View("~/Views/YourArea/YourController/YourView.aspx");
Run Code Online (Sandbox Code Playgroud)

但是当一个视图在多个区域之间共享时,我建议您使用~/Views/Shared更好地用于此目的的文件夹.


Dar*_*ius 5

我认为这是一个古老的问题,但仍然是MVC中的一个相关问题,因此,这就是我如何以DRY方式解决它,从而可以轻松更改服务器路径,并使所有相关操作自动更新:

public class FooController : Controller
{

    private ActionResult FooView(string name, string extension = "cshtml") { 
        return View("~/Areas/Bar/Views/Foo/" + name + "." + extension); }
    }


    public ActionResult SomeAction(){

      return FooView("AreaSpecificViewName");

    }

    public ActionResult SomeOtherAction(){

      return FooView("AnotherAreaSpecificViewName", "aspx");

    }

}
Run Code Online (Sandbox Code Playgroud)

这很简洁,因为它默认为Razor(.cshtml)View文件,但是可以通过提供第二个参数来显式设置,如中所示SomeOtherAction()

这很简单但很方便,尤其是在开发过程中,您所在区域的路径可能会发生变化或发生某些变化时。

希望能对某人有所帮助。