目前我使用的是默认路由,但我需要一条像这样的路由:
localhost/Admin/Users/Index
localhost/Admin/Users/Add
localhost/Admin/Users/Delete
其中index add和delete是AdminController.cs中带控制器的视图
其他地方的当前结构都很好,因为它不需要多个子目录。
目前我拥有我需要的文件:
{Project}/Views/Admin/Users/Index.cshtml
我如何创建此路线以及如何将其应用于控制器?
我接近这个错误吗?
答案 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());
}
答案 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);
...
}