ASP.Net MVC视图架构

3
在视图中的文件夹可以有子文件夹吗?如果可以,控制器如何访问它们?例如…我想要以下URL正常工作:
  • Admin/Index
  • Admin/Profile/Index
  • Admin/Profile/Edit/1
  • Admin/Group/Index
  • Admin/Group/Edit/1
那么,我需要在Admin文件夹中创建一个名为Profile和Group的子文件夹吗?
我尝试过这样做,并在全局文件中映射路由,但似乎没有起作用。
4个回答

4

好像您正在尝试创建管理面板,并通过将其他控制器相关的操作放入管理控制器中来实现。 我认为这不是最有效的方法。 您可以简单地按如下方式操作:

如果需要管理员链接,请使用RedirectToAction作为返回

  • Admin/Index
  • Admin/Profile
  • Admin/Group

并将其余内容放入适当的控制器中

  • Profile/Index
  • Profile/Edit/1
  • Group/Index
  • Group/Edit/1

此外,为创建/编辑/删除操作添加[Authorize(Roles = "Administrator")][AcceptVerbs(HttpVerbs.Post)]


3
只需将返回动作设置为以下内容即可:

return View("Profile/Index");

这将使控制器找到“子视图”的技巧。要将URL映射到正确的控制器,您可以使用路由系统,但忽略子视图,只需映射到正确的控制器,让控制器处理正确的视图。


3
您可以创建自己的ViewEngine并覆盖文件搜索位置,可以像下面这样实现:
public class MyViewEngine : WebFormViewEngine
{
    public MyViewEngine()
    {
        ViewLocationFormats = new[] { 
            "~/{0}.aspx",
            "~/{0}.ascx",
            "~/Views/{1}/{0}.aspx",
            "~/Views/{1}/{0}.ascx",
            "~/Views/Shared/{0}.aspx",
            "~/Views/Shared/{0}.ascx",
        };

        MasterLocationFormats = new[] {
            "~/{0}.master",
            "~/Shared/{0}.master",
            "~/Views/{1}/{0}.master",
            "~/Views/Shared/{0}.master",
        };
        PartialViewLocationFormats = ViewLocationFormats;

    }
}

然后在您的应用程序中添加以下内容
ViewEngines.Engines.Add(new MyViewEngine());

这是很好的信息...等我有更多时间,我一定想深入了解。 - Papa Burgundy
这正是我一直在寻找的,感谢您提供的简单示例!!!顺便说一下,如果您能以某种方式获取“主题”变量,您也可以使用此实现动态主题文件夹... :) - Jason

1

还有另一种选择,即使用“区域”概念来实现视图和控制器的全局分组,如Billy McCafferty在这篇有趣的文章中所描述的:

将MVC“区域”创建为Views下的子文件夹

代码是可用的,因此您可以检查所有操作,但基本上是用另一个ViewEngine替换原始的ViewEngine,但具有不同的视图位置管理,并根据定义的区域注册路由。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接