如何创建此路线并使用它?

时间:2016-11-07 20:27:36

标签: c# asp.net-mvc-5 routes

目前我使用的是默认路由,但我需要一条像这样的路由:

localhost/Admin/Users/Index
localhost/Admin/Users/Add
localhost/Admin/Users/Delete

其中index add和delete是AdminController.cs中带控制器的视图

其他地方的当前结构都很好,因为它不需要多个子目录。

目前我拥有我需要的文件:

{Project}/Views/Admin/Users/Index.cshtml

我如何创建此路线以及如何将其应用于控制器?

我接近这个错误吗?

2 个答案:

答案 0 :(得分:1)

可以使用Route attributes轻松解决此问题,例如:

[Route("Admin/Users/Edit/{id?}")]
public ActionResult TestView(string id)
{
    if (!string.IsNullOrEmpty(id))
    {
        return View(“OneUser”, GetUser(id));
    }
    return View(“AlUsers”, GetUsers());
}

MSDN:https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/

答案 1 :(得分:0)

您可以在RegisterRoutes中注册指定路径路径和控制器的另一条路线:

routes.MapRoute(
    name: "Admin",
    url: "{controller}/Users/{action}/{id}",
    defaults: new { id = UrlParameter.Optional },
    constraints: new { controller = "Admin" }
);

要处理目录结构,您需要扩展默认视图引擎以添加新的视图路径:

public class ExtendedRazorViewEngine : RazorViewEngine
{
    public ExtendedRazorViewEngine()
    {
        List<string> existingPaths = new List<string>(ViewLocationFormats);
        existingPaths.Add("~/Views/Admin/Users/{0}.cshtml");

        ViewLocationFormats = existingPaths.ToArray();
    }
}

Application_Start注册引擎:

protected void Application_Start()
{
    ViewEngines.Engines.Clear();

    ExtendedRazorViewEngine engine = new ExtendedRazorViewEngine();
    ViewEngines.Engines.Add(engine);

    ...
}