在 Razor 视图中为包含参数的属性路由创建 URL
Create URL in Razor View for Attribute Route containing parameters
我在下面的控制器中指定了一条路由,其中包含与操作上的重载相匹配的参数。
public class OrganisationsController : Controller
{
[HttpGet]
[Route("organisations/{id}/employees")]
public ActionResult Employees(int id)
{
// Some code here
}
}
我正在尝试使用 @Html.ActionLink
在 Razor 视图中创建 URL 以匹配控制器上指定的路由,例如 localhost:55416/Organisations/2/Employees
,但我还没有能够让它工作。
我能得到的最接近的是 localhost:55416/Organisations/Employees/2
,它因为路线错误而不起作用,或者 localhost:55416/Organisations/Employees?id=2
实际上在组织控制器上的 Employees 操作被击中时起作用,但它只是一个查询字符串,它否定了首先添加 [Route("organisations/{id}/employees")]
路由的目的。
我在互联网上找到的所有示例和帖子都处理最后的参数,例如 [Route("organisations/employees/{id}")]
,而不是在控制器和操作之间。
我没有尝试将自定义路线添加到 RouteConfig
,因为在我看来 URL 是起点,需要根据指定的路线首先正确控制器,还是我错了?
有没有一种方法可以让我按照我想要的方式使用 ActionLink
生成 URL,或者我是否需要另一种方法来执行此操作?
功劳归于 Sam,他提供的 ActionLink 是正确的,我尝试时它不起作用的原因是因为我没有将 routes.MapMvcAttributesRoutes();
行添加到 RouteConfig.cs我试图在其中创建 URL 的项目,在添加它之后,预期的 localhost:55416/Organisations/2/Employees
url 由 @Html.ActionLink("Employees", "Employees", "Organisations", new { id = item.Id }, null)
操作 link.[=14 生成=]
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
我在下面的控制器中指定了一条路由,其中包含与操作上的重载相匹配的参数。
public class OrganisationsController : Controller
{
[HttpGet]
[Route("organisations/{id}/employees")]
public ActionResult Employees(int id)
{
// Some code here
}
}
我正在尝试使用 @Html.ActionLink
在 Razor 视图中创建 URL 以匹配控制器上指定的路由,例如 localhost:55416/Organisations/2/Employees
,但我还没有能够让它工作。
我能得到的最接近的是 localhost:55416/Organisations/Employees/2
,它因为路线错误而不起作用,或者 localhost:55416/Organisations/Employees?id=2
实际上在组织控制器上的 Employees 操作被击中时起作用,但它只是一个查询字符串,它否定了首先添加 [Route("organisations/{id}/employees")]
路由的目的。
我在互联网上找到的所有示例和帖子都处理最后的参数,例如 [Route("organisations/employees/{id}")]
,而不是在控制器和操作之间。
我没有尝试将自定义路线添加到 RouteConfig
,因为在我看来 URL 是起点,需要根据指定的路线首先正确控制器,还是我错了?
有没有一种方法可以让我按照我想要的方式使用 ActionLink
生成 URL,或者我是否需要另一种方法来执行此操作?
功劳归于 Sam,他提供的 ActionLink 是正确的,我尝试时它不起作用的原因是因为我没有将 routes.MapMvcAttributesRoutes();
行添加到 RouteConfig.cs我试图在其中创建 URL 的项目,在添加它之后,预期的 localhost:55416/Organisations/2/Employees
url 由 @Html.ActionLink("Employees", "Employees", "Organisations", new { id = item.Id }, null)
操作 link.[=14 生成=]
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}