Asp.net MVC子控制器
问题描述:
我要创建一个网站结构类似这样
/演示/
/演示/管理/创建
/演示/管理/编辑/ IDAsp.net MVC子控制器
我可以创造一个DemoController将包含管理员。但如何显示创建/编辑页面?只有在用户登录后才能访问创建/编辑页面。创建/编辑页面的位置在哪里?
答
如果你确定你应该严格执行URL的strusture,那么也许“区域”解决方案将适合你(虽然不知道,只是有一个简短的看法)。但我认为,对于一个小项目,你可以简单地做:
- 单独的 “admin” 的控制器(这将导致/演示/管理/创建/管理/编辑/ ID);
- 或者你可以使用自定义ASP.NET Routing;
至于授权,你应该看看ASP.NET Web Application Security和User authentication and authorisation in ASP.NET MVC
答
所有你需要做的是创建/演示/管理的路线,那么路线分配给一个名为DemoAdminController新的控制器。为了使其仅对登录用户可访问,您可以使用Windows Forms身份验证系统。 MVC生成的默认应用程序提供了一个示例。
答
我同意的面积应该做的伎俩也可以添加,如果你想锁定全款,因为只有部分我觉得领域将继续这一方式管理员指向了控制器的自定义路线
答
很老的问题,谷歌现在就让我在这里。
有也是另一种方式来达到目标:Route
和RoutePrefix
属性。
只是一小段代码供参考。
[RoutePrefix("demo")]
public class DemoController : Controller
{
[Route("")]
public ActionResult Index() { } // default route: /demo
[Route("admin/create")]
public ActionResult Create() { } // /demo/admin/create
[Route("admin/edit/{id}")]
public ActionResult Edit(int id) { } // /demo/admin/edit/5
}
为此,必须启用属性路由。在大多数情况下,只需添加:
routes.MapMvcAttributeRoutes();
RouteConfig.cs中。
实施例:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
);
}