C# 从不同区域返回视图

C# 从不同区域返回视图,c#,asp.net-mvc,asp.net-mvc-2,areas,C#,Asp.net Mvc,Asp.net Mvc 2,Areas,我将ASP.NET MVC 2应用程序划分为几个区域。其中一个是主目录中的默认区域,另一个是区域目录中的帐户区域。现在,问题是我需要在这两个区域的控制器中使用相同的视图 如果它们在同一个区域中,我只想返回视图(“ViewName”),但是如何从我的帐户区域从控制器中的默认区域返回视图呢?有什么想法吗?您可以指定视图的相对位置: return View("~/Views/YourArea/YourController/YourView.aspx"); 但是,当一个视图在多个区域之间共享时,我建议

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


如果它们在同一个区域中,我只想
返回视图(“ViewName”)
,但是如何从我的
帐户
区域从控制器中的默认区域返回视图呢?有什么想法吗?

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

return View("~/Views/YourArea/YourController/YourView.aspx");

但是,当一个视图在多个区域之间共享时,我建议您使用
~/Views/shared
文件夹,该文件夹可以更好地实现这一目的。

这是一个老问题,但在MVC中仍然是一个相关问题,因此下面是我如何以一种简单的方式解决它,让您可以轻松更改服务器路径,并自动更新所有从属操作:

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");

    }

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

这很简单但很方便,尤其是在开发过程中,当您所在区域的路径可能发生变化或其他情况时


希望这对某人有所帮助。

谢谢你,达林-我会试试这个。请注意,你可以将此视图粘贴到
~/Views/Shared
文件夹中,然后从任何控制器/区域调用
返回视图(“视图名”)