Javascript window.location no funciona en MVC3
Frecuentes
Visto 6,106 veces
1
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?
1 Respuestas
5
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 c# javascript jquery asp.net-mvc asp.net-mvc-3 or haz tu propia pregunta.
Creo que tu pregunta es un duplicado de esta: stackoverflow.com/questions/4045308/razor-syntax-and-javascript - Jan Aagaard
@JanAagaard No es un engaño, tiene más que ver con el enrutamiento. - mattytommo