C# ASP MVC 5路由映射

C# ASP MVC 5路由映射,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,在我的视图文件夹中我有一个“用户”文件夹,它不包含相应的视图,但包含将包含视图的子文件夹 例如: User Create create.cshtml Edit edit.cshtml 然后我有一个控制器,目前只有一个用于创建的操作: public ActionResult Create() { return View("Create/Create"); } 因此,要点击该操作,我转到user/create,它返回的视图很好 当我试图使用Url.RouteUrl在标记中

在我的视图文件夹中我有一个“用户”文件夹,它不包含相应的视图,但包含将包含视图的子文件夹

例如:

User
 Create
   create.cshtml
 Edit
   edit.cshtml
然后我有一个控制器,目前只有一个用于创建的操作:

public ActionResult Create() {
    return View("Create/Create");
}
因此,要点击该操作,我转到
user/create
,它返回的视图很好

当我试图使用
Url.RouteUrl
标记中链接到该视图时,就会出现问题。它错误地说:

在路由集合中找不到名为“用户/创建”的路由

但对我来说,它与路由配置中的默认路由相匹配:
controller/action

这是我的路线图:

public static void RegisterRoutes(RouteCollection routes) {
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  // Turn on attribute routing in the controllers
  routes.MapMvcAttributeRoutes();

  routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new {
      controller = "Home", action = "Index", id = UrlParameter.Optional
    }
  );
}

那么为什么我需要为它定义自定义路由呢?

您不需要为它定义自定义路由,但需要遵循文件夹的约定。将create.cshtml和edit.cshtml视图直接放在用户文件夹中,删除create和edit子文件夹,您不需要它们

现在,在控制器中,您只需使用:

public ActionResult Create() {
    return View();
}
它知道要查找什么以及在哪里找到它,因此它将成功地选择您的User/create.cshtml视图。然而,我们通常将模型传递给我们的视图。在类似Create的视图中,模型用于构建所有控件(文本框、标签等):

public ActionResult Create() {
    var model = new UserViewMode();
    return View(model);
}