2012-04-17 7 views
20

Estoy usando ASP.Net MVC. Aquí están mis fragmentos de código de un curso llamado controlador:URL.Acción incluye id al construir URL

public ActionResult List(int id) 
{ 
    var viewmodel.ShowUrl = Url.Action("Show", "Course"); 


    ... 
} 

public ActionResult Show(int id) 
{ 
    ... 
} 

viewmodel.ShowUrl recoge cualquiera que sea el valor del parámetro es "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 id entonces me gustaría hacer algo como esto:

var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue}); 

Así que, ¿Cómo se previene MVC de sumar el valor de ID? Puedo codificar viewmodel.ShowUrl en "/ Course/Show" pero parece ser una solución kludgy. Gracias.

+0

no puedo remeber exactamente, pero el '' Routedata' es el ViewData' y por eso se aprobó. Creo que puedes hacer 'Url.Action (" Mostrar "," Curso ", nuevo {});' o vaciar el 'RouteData' en el objeto' ViewData'. –

Respuesta

7

Supongo que en su enrutamiento, no está especificando que la identificación sea 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 un id entonces debe ser anulable o proporcionar un valor predeterminado.

public ActionResult Show(int? id) 
public ActionResult Show(int id = 0) 

De lo contrario, se producirá un error al intentar cargar la URL sin el parámetro id.

19

encontré con el mismo problema y lo que sabe, también puede simplemente usar una cadena vacía:

@Url.Action("Show", "Course", new { id = "" }) 
9

Sé que esto es viejo, pero me encontré con esta primera, pero no como cualquiera de estas soluciones, así que seguí buscando y encontré https://stackoverflow.com/a/19110921/1130636.

Puede utilizar UrlParameter.Optional para resolver este problema

Url.Action("Show", "Course", new { id = UrlParameter.Optional })

Cuestiones relacionadas