una suposición:
probablemente su ruta fue registrado después de la ruta por defecto. Ponlo como la primera ruta dentro de tu global.asax luego funcionará.
, como a continuación:
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Details", // Route name
//Put action instead of details
"{home}/{action}/{id}/{name}", // URL with parameters
new
{
controller = "Home",
action = "Details",
id = UrlParameter.Optional,
name = UrlParameter.Optional
} // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
ACTUALIZACIÓN
@Simon es correcta, pero se puede utilizar otro camino si quieres.
Para que la ruta funcione solo por un método de acción, use el siguiente código.
crea una restricción de la siguiente manera:
public class EqualConstraint : IRouteConstraint {
private string _match = String.Empty;
public EqualConstraint(string match) {
_match = match;
}
public bool Match(System.Web.HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) {
return string.Equals(values[parameterName].ToString(), _match);
}
}
Y a continuación, cambiar su ruta, como a continuación:
routes.MapRoute(
"Details", // Route name
//Put action instead of details
"{home}/{action}/{id}/{name}", // URL with parameters
new
{
controller = "Home",
action = "Details",
id = UrlParameter.Optional,
name = UrlParameter.Optional
}, // Parameter defaults
new {
controller = new EqualConstraint("Home"),
action = new EqualConstraint("Details")
}
);
El ActionLink funcionó bien cuando se añadió la ruta anterior antes de la ruta por defecto. Sin embargo, el valor predeterminado ahora es/Inicio/Detalles – Danny