2012-03-29 19 views

Respuesta

30

Utilice un campo oculto para guardar su url, luego use javascript para leer el campo oculto, luego use eso en su código. De esta forma, puede mantener el archivo JS separado de la vista. Algo como esto:

//In Your View 
    @Html.Hidden("MyURL", Url.Action("Index")) 

//In Your JS 
    var myUrl = $("#MyURL").val(); 

    $.ajax({ url: myUrl , . . . 
+0

Excelente sugerencia !! –

+0

¿Ha considerado que esto puede abrir agujeros de seguridad en la aplicación? ¡Un hacker puede reemplazar la URL objetivo en el servidor simplemente modificando el valor de los campos ocultos! – Mosh

+4

@Mosh Todo lo que se encuentra en una página web puede ser modificado por un supuesto hacker, incluidos los archivos JavaScript antes de que se ejecuten. No puedes detener esto (incluso con encriptación). La única vez que esto sería un problema es si un hacker puede modificar el valor de esos campos ocultos _para otras personas_. – Pluto

8

La forma más fácil es sólo para crear una variable global llamada algo y simplemente hacer referencia a ella en su externo de JS

var baseURL = '@Url.Action("Index")'; 

Dentro de su JS externo

$.ajax({ url: baseURL + "Action" 
+0

La mejor práctica es espacio de nombres variables globales '' 'si { window.myProject = {} (window.myProject!); } myProject.baseURL = '@ Url.Action ("Index")'; '' ' – Josiah

5

Puede utilizar RazorJS para ese propósito. Permite escribir Razor-Style C# o VB.NET dentro de sus archivos JavaScript. Hay una breve descripción disponible here.

+0

La URL de descripción dada no es válida ahora. ¿Puedes verificar eso? Actualice la URL si conoce alguna. También estoy en necesidad de eso. Gracias por adelantado. –

2

No hay necesidad de tener un campo oculto, incluso esto también funciona en el archivo externo .js.

var myUrl =/Nombre del controlador/Nombre de la acción;

$.ajax({ url: myUrl , . . 
0

he utilizado un enfoque similar al raklos, pero estaba buscando para obtener la ruta del directorio raíz en todos los lugares, así que fui con el código de abajo.

@Html.Hidden("AppUrl", Url.Content("~"))