asp.net-mvc-3 - mvc - url action post
URL.Action incluye id al construir URL (3)
Supongo que en su enrutamiento, no está especificando que el ID es un parámetro opcional. Esta es la ruta predeterminada en un proyecto de muestra.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);
Tenga en cuenta la inclusión de id = UrlParameter.Optional
. Sin eso, obtendrías el comportamiento que describes porque cree que el ID es obligatorio.
En una nota lateral, si su acción Mostrar no siempre tiene una identificación, entonces debe ser anulable o proporcionar un valor predeterminado.
public ActionResult Show(int? id)
public ActionResult Show(int id = 0)
De lo contrario, recibirá un error cuando intente cargar la url sin el parámetro id.
Estoy usando ASP.Net MVC. Aquí están mis fragmentos de código de un controlador llamado Curso:
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
viewmodel.ShowUrl toma el valor que sea del parámetro "id". Entonces viewmodel.ShowUrl se convierte en "/ Course / Show / 151" (el valor de id es 151); Quiero ser capaz de establecer la parte id en el cliente en función de la interacción del usuario. Quiero que el valor de viewmodel.ShowUrl sea "/ Curso / Mostrar".
Esto me parece un error. No le estoy diciendo a Url.Action que incluya un valor de identificación. Lo está haciendo solo. Si quiero establecer el valor de identificación, entonces haría algo como esto:
var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});
Entonces, ¿cómo evitar que MVC agregue el valor de identificación? Puedo codificar viewmodel.ShowUrl en "/ Course / Show" pero parece ser una solución kludgy. Gracias.
Solo encontré el mismo problema y, para que lo sepas, también puedes usar una cadena vacía:
@Url.Action("Show", "Course", new { id = "" })
Sé que esto es viejo, pero encontré esto primero, pero no me gustó ninguna de estas soluciones, así que seguí buscando y encontré https://.com/a/19110921/1130636 .
Puede usar UrlParameter.Optional
para resolver este problema
Url.Action("Show", "Course", new { id = UrlParameter.Optional })