2012-06-11 22 views

Respuesta

23

javascript es un lenguaje del lado del cliente que no sabe nada sobre el idioma del lado del servidor que está utilizando. Por lo tanto, es normal que no haya un equivalente en javascript del lado del servidor auxiliar que genera una url usando las definiciones de ruta del lado del servidor.

No es muy claro lo que está tratando de lograr, pero si usted desea utilizar llamar a algunos URL a través de JavaScript que podría generar esta url usando un ayudante del lado del servidor:

<script type="text/javascript"> 
    var url = '@Url.Action("SomeAction", "SomeController")'; 
    // do something with the url client side variable, for example redirect 
    window.location.href = url; 
</script> 

Si desea utilizar este url en un archivo javascript por separado donde no tiene acceso a los ayudantes del lado del servidor aún podría, dependiendo de la situación, incluir esta url en algún elemento DOM.

Por ejemplo:

<div id="foo" data-url="@Url.Action("SomeAction", "SomeController")">Click me</div> 

Aviso el atributo data-url HTML5 que hemos incrustado en el DOM y se utiliza un ayudante del lado del servidor para asegurarse de que la URL generada será siempre correcta en función de nuestras definiciones de enrutamiento. Ahora podríamos en un archivo JavaScript independiente discretamente suscribirse al evento click de este div y recuperar la url:

$('#foo').click(function() { 
    var url = $(this).data('url'); 
    // do something with the url client side variable, for example redirect 
    window.location.href = url; 
}); 

Otros ejemplos incluyen, obviamente, los estándares <a> y <form> elementos que deberían generarse usando ayudantes lado del servidor HTML y luego todo lo que tiene que hacer en su archivo javascript por separado es obtener sus atributos correspondientes href o action para recuperar la url real y hacer algo con ella.

+0

Gracias. Era el "window.location.href = url;" código que estaba buscando – Martin

+1

Me alegro de poder ayudarlo. Si esta respuesta lo ayudó a resolver el problema que estaba teniendo, podría considerar marcarlo como respuesta haciendo clic en la marca al lado: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-withwer -work –

+1

@DarinDimitrov ¿Podemos pasar parámetros a la acción específica '@ Url.Action ("SomeAction", "SomeController")' en este trozo de código? –

0

Otra opción es almacenar la URL en un lugar oculto <div> en su página y llamarla a través de Javascript más adelante. Se vería así:

Index.cshtml:

<div style="display: none;" id="url"> 
    @Url.Action("SomeAction", "SomeController") 
</div> 

entonces usted puede utilizar esto en su archivo script.js para construir los enlaces que desee.

var url = $("#url").text(); 

La variable URL contendría entonces un enlace seguro para la Web a /SomeController/SomeAction.

Cuestiones relacionadas