Asp.net mvc Asp.NETMVC中的管理区域
我的问题可能很明显,但我想构建一个设计良好的web应用程序。 对于任何管理区域,管理员都应该能够列出/创建/删除/修改用户、文章、帖子等 我想知道设计应用程序的最佳方法是什么。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,但它可以与它一起使用,而且
我应该为这些项中的每一项(/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时也有类似的顾虑。我确实理解您的方法,但这将真的会给我的管理控制器带来巨大的麻烦!我正在构建一种电子商务/价格比较web应用程序,我的管理领域肯定会快速发展!我想我会建立一个新的MVC网站来处理管理工作,即使我的老板不希望这样。这可能是个好主意,但我没有时间学习如何使用DynamicATA并使其与MVC协同工作。我最近在一个项目中使用了DynamicATA,设置和使用都非常简单。最简单的方法是使用动态数据创建一个新项目。如果你想像这样将管理整合到你的网站中,我认为最好采用用户的方式。公正执行