Asp.Net MVC的管理区域

时间:2009-05-25 06:52:17

标签: asp.net-mvc administration asp.net-mvc-areas

我的问题可能很明显,但我想构建一个设计良好的Web应用程序。 对于任何管理区域,管理员应该能够列出/创建/删除/修改用户,文章,帖子等......

我想知道设计应用程序的最佳方法是什么。 我应该为每个项目(/ Users / Create / id或/ Posts / Delete / id)创建一个控制器,还是在我的管理控制器中创建所有操作(/ Administration / CreateUser / id或/ Administration / DeletePost / id)?

8 个答案:

答案 0 :(得分:14)

您应该为每个实体编写一个单独的控制器,以便为控制器类保持清晰的关注点分离。如果你只有一个控制器,那么你只有一个带有几十个视图的视图目录,而你的控制器将包含许多方法,很快就会变得无法管理。

答案 1 :(得分:1)

答案取决于控制器的功能。刚开始使用一个控制器,如果它太多分裂成几个。 关于MVC的好处是你在控制器中放置东西不会对URL产生任何影响。您可以非常轻松地将/ Users / Create映射到例如UserAdminController类。

答案 2 :(得分:1)

我只想建立一个处理管理的新MVC网站。 只要您在不同的程序集中分离数据和业务逻辑,就可以获得更灵活的解决方案。然后,您可以将您的网站发布到子域名admin.yoursite.com。这样你就不必弄乱你的路线了,你可以将它们保存在不同的视图中,这是最优雅的解决方案。 Pro和Con's很高兴听到。

我正在开发一个项目,该项目需要相同的管理网站,但还没有那么远,所以这个问题对我很感兴趣。

答案 3 :(得分:1)

我目前正在为大型客户端使用ASP.NET。

我采用的方法是将动作的功能放到另一个类中。

示例

我也在写一个管理部门。将有一个管理控制器(我们的管理部分很小,如果它更大我会改变路由以允许更多控制器,现在我们使用开箱即用的配置)。如果我创建“EditUser”视图。我还将创建一个“EditUserAction”。所有EditUser代码都将进入该类。我在Edit User方法的Administration控制器类中构造EditUserAction类。这将从Controller类中删除所有特定于操作的代码。这样,所有特定于操作的代码都在action方法或action类中。否则,控制器将很快被来自各种动作的代码溢出。控制器类会在短时间内导致无法控制的混乱。

课程示例

public class Administration: Controller
{
    public ActionResult EditUser(string userId)
    {
        EditUserAction action = new EditUserAction();
    }
}

public class EditUserAction
{
    public void Save(User user)
    {   
        //save code here
    }
}

我希望这个解释清楚。如果它不让我知道,我会澄清。

回答您的问题我正在做后者( / Administration / CreateUser / id / Administration / DeletePost / id )。

答案 4 :(得分:0)

您可以使用DynamicData。它不是MVC,但它可以与它一起使用,它很容易设置和使用。

答案 5 :(得分:0)

这是提出问题的另一种方式。

我的母版页的一部分:

<% if (!String.Equals(ViewContext.RequestContext.RouteData.GetRequiredString("controller"), "Administration")) { %>
<div>
    <!-- Some Code -->
</div> <% } %>

正如您所看到的,在我的母版页中,我想显示页面的某些部分,具体取决于在管理区域工作的用户。 它只适用于管理控制器(/ Administration / CreateUser / id)......但当我使用不同的控制器作为用户或文章(/ User / DeleteUser / id或/ Article / Details / id)时,它变得很乱

我更喜欢每个实体使用一个控制器,但我找不到将这种方法与多个控制器联系起来的方法。

答案 6 :(得分:0)

我建议使用this solution

但是我将定义改为:

    public ThemedViewEngine()
    {
        base.MasterLocationFormats = new string[] {
            "~/Views/{1}/{0}.master", 
            "~/Views/Shared/{0}.master",
            "~/Themes/{2}/Views/{1}/{0}.master", 
            "~/Themes/{2}/Views/Shared/{0}.master",
            "~/Themes/Default/Views/{1}/{0}.master", 
            "~/Themes/Default/Views/Shared/{0}.master"
        };
        base.ViewLocationFormats = new string[] { 
            "~/Views/{1}/{0}.aspx", 
            "~/Views/{1}/{0}.ascx", 
            "~/Views/Shared/{0}.aspx", 
            "~/Views/Shared/{0}.ascx",
            "~/Themes/{2}/Views/{1}/{0}.aspx", 
            "~/Themes/{2}/Views/{1}/{0}.ascx", 
            "~/Themes/{2}/Views/Shared/{0}.aspx", 
            "~/Themes/{2}/Views/Shared/{0}.ascx",
            "~/Themes/Default/Views/{1}/{0}.aspx", 
            "~/Themes/Default/Views/{1}/{0}.ascx", 
            "~/Themes/Default/Views/Shared/{0}.aspx", 
            "~/Themes/Default/Views/Shared/{0}.ascx" 
        };
        base.PartialViewLocationFormats = new string[] {
            "~/Views/{1}/{0}.aspx",
            "~/Views/{1}/{0}.ascx",
            "~/Views/Shared/{0}.aspx",
            "~/Views/Shared/{0}.ascx",
            "~/Themes/{2}/Views/{1}/{0}.aspx",
            "~/Themes/{2}/Views/{1}/{0}.ascx",
            "~/Themes/{2}/Views/Shared/{0}.aspx",
            "~/Themes/{2}/Views/Shared/{0}.ascx",
            "~/Themes/Default/Views/{1}/{0}.aspx",
            "~/Themes/Default/Views/{1}/{0}.ascx",
            "~/Themes/Default/Views/Shared/{0}.aspx",
            "~/Themes/Default/Views/Shared/{0}.ascx"
        };
    }

默认主题是默认主题,因此必须存在。

目录结构将是:

  • 内容
  • 主题
    • 默认
      • 内容
        • 主页
        • 博客
        • 什么应该剥皮
    • OtherTheme
      • 内容
        • 主页
        • 博客
        • 什么应该剥皮
    • 文章
    • 帖子
    • 用户
    • 设置
    • 其他管理事项

答案 7 :(得分:0)

这取决于管理区域的比例尺寸, 我建议你考虑做以下(或者记录一下)

  • 考虑您想要独立管理的实体数量,
  • 考虑每个人将采取多少行动,
  • 检查您的应用程序和管理区域之间是否存在任何依赖关系(用户访问权限,用户友好的URL)

然后您可以指定哪种方法可以帮助您,拥有一个管理控制器,实体控制器中的管理员操作,或者在大型功能应用程序的情况下定义新的管理项目。

*如果项目规模快速增长并且很快需要大规模,我会选择第三个 - 拥有一个新的管理mvc项目。

我希望它可以帮助你做出决定。