2011-12-19 21 views
6

sé que uno puede utilizar esta función

@Url.Action("MyInfo", "Home") 

para evitar la hardcoding de direcciones URL, pero mis $.ajax las llamadas están en un archivo .js separada. ¿Funcionaría lo anterior?

Según mi conocimiento, el @Url.Action solo funcionará dentro del archivo Razor. Pero teniendo en cuenta que se nos recomienda utilizar JS no molesto, no estoy muy seguro de cómo usaría el @Url.Action.

Por favor, asesorar.

Respuesta

12

¿Sería lo anterior siguen trabajando?

Desde mi conocimiento, la @ Url.Action sólo funcionará dentro del archivo de afeitar

Su conocimiento es correcta.

Pero teniendo en cuenta que se nos aconseja utilizar no intrusiva JS, no estoy muy seguro de cómo me gustaría utilizar el @ Url.Action.

Se puede usar HTML 5 Data- * atributos de algún elemento DOM que está discretamente realzando (a menos que este elemento es ya un <form> o un ancla en cuyo caso ya contiene una URL):

<div id="foo" data-url="@Url.Action("foo")">Hello</div> 

y luego en su archivo JavaScript independiente:

$(function() { 
    $('#foo').click(function() { 
     var url = $(this).data('url'); 
     // TODO: do something with the url 
    }); 
}); 
+0

Si tiene un 'formulario', simplemente haga esto:' var url = $ ('form'). Url; '. –

4

Agregue un parámetro de función para las rutas relativas. Por ejemplo, en su opinión:

<script type="text/javascript"> 
    var path = "@Url.Action("ActionName", "ControllerName")"; 

    someAjaxMethod(path) 
</script> 

y en su archivo externo de JS:

function someAjaxMethod(path) 
{ 
    var data = {}; 
    $.ajax(path, data) 
} 
+0

Este ejemplo no muestra un buen enfoque, porque variable de ruta es global. Sería mejor utilizar algunos espacios de nombres para URL globales o el enfoque de "url de datos" para las URL locales. –

+0

Acepto que no es la mejor respuesta, y prefiero el enfoque de Darin, pero sigue siendo válido para escenarios simples. – jrummell

+0

Lo siento, pero revertiste mi edición con mejoras reales en el código que incluso no funciona (error de sintaxis)? Me gustaría downvote dos veces si pudiera. ¡Puedes escribir cualquier código que no quieras pero nadie debería copiarlo! –