好的,以前有人问过,但那里没有可靠的解决方案.所以为了我自己和其他可能觉得有用的人的目的.
在MVC2(ASP.NET)中我想要它,所以当有人导航到网站时,指定了一个默认区域.因此,导航到我的站点应该会将您发送到AreaZ中的ControllerX ActionY.
在Global.asax中使用以下路由
routes.MapRoute(
"Area",
"",
new { area = "AreaZ", controller = "ControllerX ", action = "ActionY " }
);
Run Code Online (Sandbox Code Playgroud)
现在,这样可以尝试提供正确的页面.但是,MVC继续在站点的根目录中查找View,而不是在Area文件夹中查找.
有办法解决这个问题吗?
编辑
有一个'解决方案',即在ControllerX中,ActionY返回视图的完整路径.一点点黑客但它确实有效.但是我希望有更好的解决方案.
public ActionResult ActionY()
{
return View("~/Areas/AreaZ/views/ActionY.aspx");
}
Run Code Online (Sandbox Code Playgroud)
编辑:
当具有页面的HTML ActionLink时,这也成为一个问题.如果未设置该区域,则"操作链接"输出为空白.
所有这些都是设计还是缺陷?
我想将我的MVC项目分成几个项目
首先,我创建了两个项目Front和Views
该阵线项目是一个Web应用程序,其中包含控制器和模型
本次项目是一个类库项目,将只包含的意见
我的问题是如何在Views项目中创建控制器调用视图
我有像这样的控制器:
public ActionResult Default()
{
return this.View();
}
Run Code Online (Sandbox Code Playgroud) 我有两个非常相似的网站,在某些地方有很多共同点,但其他一些地方完全不同.所以我创建了三个mvc4应用程序MainSiteA,MainSiteB,SharedUI,并使用RazorGenerated在两个站点之间预编译(和共享)视图.当前的问题是我的SharedUI视图优先于MainSiteA上的编译或非编译视图,我希望它反之亦然.
有:
SiteA:
Views/Index.cshtml (a)
SiteB:
Views/Index.cshtml (b)
Views/Header.cshtml (b)
SharedUI:
Views/Index.cshtml (s)
Views/Header.cshtml (s)
Views/Footer.cshtml (s)
Run Code Online (Sandbox Code Playgroud)
如何以这种方式根据站点访问特定页面:
SiteA
Index.cshtml (a)
Header.cshtml (s)
Footer.cshtml (s)
SiteB
Index.cshtml (b)
Header.cshtml (b)
Footer.cshtml (s)
Run Code Online (Sandbox Code Playgroud)
我希望MVC首先查看它自己的MVC应用程序,如果找不到视图,请查看视图的共享库(SharedUI).