Javascript window.location no funciona en MVC3

Tengo una página que se procesa a través de un ActionResult , que son EntityIndex eso toma int id como parámetro y carga esa entidad.

En esta vista, un usuario puede seleccionar de un menú desplegable otras entidades relacionadas y la vista debe recargarse enviando la ID seleccionada del menú desplegable a la misma Acción EntityIndex con la nueva ID.

Estoy usando un evento de cambio de jQuery en el menú desplegable para navegar y recargar la página:

$("#RelatedEntity").change(function () {
    window.location = '@Url.Action("EntityIndex", new {id = ""})' + '/' + $(this).val();
});

Esta es la acción

public ActionResult EntityIndex(int id) {
    ... gets entity by id here ...
    return View(model);
}

La acción funciona bien cuando se golpea, pero la línea jQuery anterior falla con un error:

http://localhost:1798/Entity/EntityIndex/@Url.Action("EntityIndex", new {id = ""})/539

Por alguna razón el window.location disparando el @Url.Action está tratando la acción como una cadena y no como una acción a la que navegar... ¿qué tiene de malo Url.Action que impide que se comporte correctamente?

preguntado el 22 de mayo de 12 a las 17:05

Creo que tu pregunta es un duplicado de esta: stackoverflow.com/questions/4045308/razor-syntax-and-javascript -

@JanAagaard No es un engaño, tiene más que ver con el enrutamiento. -

1 Respuestas

Tu JQuery es muy leve off. Usar la ruta predeterminada y no especificar ninguna ID generará:

/controlador/acción/

Entonces, todo lo que necesita hacer es poner su valor al final. Prueba esto:

$("#RelatedEntity").change(function () {
    window.location = '@Url.Action("EntityIndex")' + $(this).val();
});

Debería darte (suponiendo que el valor sea 23):

/controlador/accion/23

contestado el 22 de mayo de 12 a las 17:05

Desafortunadamente, eso no funcionó, usando eso navego a localhost:1798/Entidad/ÍndiceEntidad/… lo que no me da el gran y feo error de IIS que estaba recibiendo, sino más bien un '¿qué diablos es este parámetro de cadena?' error de tecleado - cd herrero

Ah, espera, ¿estás tratando de usar esto en un archivo JS externo o en algo que no sea una vista de Razor? - mattytommo

¡Sí! Este JS está en un archivo separado Entity.js y está dentro de la sección document.ready y se hace referencia a la vista con la etiqueta de secuencia de comandos: cd herrero

Ah, entonces no puede usar la sintaxis de Razor en un archivo externo, lo que tendrá que hacer es almacenar el enlace generado por Razor dentro de una entrada oculta O llamar a una función en su archivo JS externo desde su vista y pasarlo generado por Razor enlace como un parámetro a la función, luego guárdelo globalmente en una variable en su archivo JS. Utilizando @URl.... en un archivo JS está literalmente usando una cadena con @ en :) - mattytommo

Jajajaja no te preocupes, nos pasa a los mejores :). ¡Estoy seguro de que lo he intentado y he fallado antes! - mattytommo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.