Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Asp.NETMVC中的管理区域_Asp.net Mvc_Administration_Asp.net Mvc Areas - Fatal编程技术网

Asp.net mvc Asp.NETMVC中的管理区域

Asp.net mvc Asp.NETMVC中的管理区域,asp.net-mvc,administration,asp.net-mvc-areas,Asp.net Mvc,Administration,Asp.net Mvc Areas,我的问题可能很明显,但我想构建一个设计良好的web应用程序。 对于任何管理区域,管理员都应该能够列出/创建/删除/修改用户、文章、帖子等 我想知道设计应用程序的最佳方法是什么。 我应该为这些项中的每一项(/Users/create/id或/Posts/Delete/id)创建一个控制器,还是在我的管理控制器(/Administration/CreateUser/id或/Administration/DeletePost/id)中创建所有操作?您可以使用它。它不是MVC,但它可以与它一起使用,而且

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

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

您可以使用它。它不是MVC,但它可以与它一起使用,而且安装和使用起来非常简单

答案取决于控制器中有多少功能。只要从一个控制器开始,如果控制器太多,就把它分成几个。
MVC最大的优点是,在控制器中放置东西不必对URL产生任何影响。您可以非常轻松地将/Users/Create映射到例如UserAdminController类。

您应该为每个实体编写一个单独的控制器,以保持控制器类关注点的清晰分离。如果您只有一个控制器,那么您将只有一个视图目录和几十个视图,并且您的控制器将包含几十个方法,这将很快变得难以管理。

我将创建一个处理管理的新MVC网站。 只要在不同的程序集中分离数据和业务逻辑,就有了更灵活的解决方案。然后,您可以将您的网站发布到一个子域,例如admin.yoursite.com。这样你就不必弄乱你的路线,你可以把它们放在不同的视图中,这是最优雅的解决方案。 赞成者和反对者都很高兴听到


我正在从事一个项目,该项目将需要相同的管理站点,但还没有完成,所以这个问题让我很感兴趣。

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

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

示例

我也在写一个行政部分。将有一个管理控制器(我们的管理部分是小的,如果它更大,我会改变路由,以允许更多的控制器,因为现在我们正在使用开箱即用的配置)。如果我创建一个“EditUser”视图。我还将创建一个“EditUserAction”。所有EditUser代码都将进入该类。我在Edit User方法的Administration controller类中构造EditUserAction类。这将从控制器类中删除所有特定于操作的代码。这样,所有特定于操作的代码要么在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)。

这里是问我问题的另一种方式

我的母版页的一部分:

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

如您所见,在我的母版页中,我希望显示页面的某些部分,具体取决于是否在管理区域工作的用户。 它只与管理控制器(/Administration/CreateUser/id)配合使用,效果非常好。。。但当我使用不同的控制器作为用户或文章(/User/DeleteUser/id或/Article/Details/id)时,它会变得一团糟

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

我建议使用

但我将定义改为:

    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"
        };
    }
默认主题是默认主题,因此它必须存在

目录的结构将是:

  • 内容
  • 主题
    • 违约
      • 内容
      • 观点
        • 博客
        • 什么都该剥皮
    • 其他主题
      • 内容
      • 观点
        • 博客
        • 什么都该剥皮
  • 观点
    • 文章
    • 职位
    • 使用者
    • 背景
    • 其他行政事务

这取决于管理区域的规模大小, 我建议你考虑做下面的事情(或者也许有点文档)

  • 考虑要独立管理的实体数量
  • 考虑一下每个人会有多少行动
  • 检查应用程序和管理区域之间是否存在任何依赖关系(用户访问,对于用户友好的URL)
然后,您可以指定哪种方法可以帮助您,在实体控制器中设置一个管理控制器、管理操作,或者在大型功能应用程序中定义一个新的管理项目

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


我希望这能帮助您做出决定。

问得好,我在开始使用MVC时也有类似的顾虑。我确实理解您的方法,但这将真的会给我的管理控制器带来巨大的麻烦!我正在构建一种电子商务/价格比较web应用程序,我的管理领域肯定会快速发展!我想我会建立一个新的MVC网站来处理管理工作,即使我的老板不希望这样。这可能是个好主意,但我没有时间学习如何使用DynamicATA并使其与MVC协同工作。我最近在一个项目中使用了DynamicATA,设置和使用都非常简单。最简单的方法是使用动态数据创建一个新项目。如果你想像这样将管理整合到你的网站中,我认为最好采用用户的方式。公正执行