2009-09-15 49 views
5

chicos hallo,mejor manera de no codificar la URL cuando se utiliza ASP.NET MVC con jQuery

estoy usando ASP.NET MVC con jQuery y va genial por ahora. Solo, hay una pregunta que me está molestando. ¿Cómo debo manejar las URL en los métodos jquery? Realmente no me gustaría código difícil que, como aquí:

$(function() { 
     $.getJSON("/Home/List", function(data) { 
      var items = "---------------------"; 
      $.each(data, function(i, country) { 
       items += "" + country.Text + ""; 
      }); 
      $("#Countries").html(items); 
     }); 

     $("#Countries").change(function() { 
      $.getJSON("/Home/States/List/" + $("#Countries > option:selected").attr("value"), function(data) { 
       var items = "---------------------"; 
       $.each(data, function(i, state) { 
        items += "" + state.Text + ""; 
       }); 
       $("#States").html(items); 
      }); 
     }); 
    }); 

Es muy recomendable utilizar métodos de ayuda HTML para crear enlaces en MVC, como Html.ActionLink, Html.BeginForm lo que en caso de que el cambio a alguien que HomeController esté mapeado en MyHome en lugar de Home, no habrá problema.

Entonces, ¿cómo no codificar la url como en el ejemplo?

Además, no quiero utilizar ASP.NET Ajax porque estoy de acuerdo con esta respuesta asp-net-ajax-vs-jquery-in-asp-net-mvc.

Gracias

Respuesta

6

Se podría definir múltiples variables JavaScript globales:

<script type="text/javascript"> 
    var listUrl = '<%= Url.Action("Index", "Home") %>'; 
    var statesListUrl = '<%= Url.Action("States", "Home") %>'; 
</script> 

que será utilizado más tarde por los métodos $ .getJSON.

+0

Esto parece una buena manera de hacerlo. Gracias –

+0

Tal vez debería evitar el alcance global, mejor espacio de nombres en (por ejemplo) ajaxUrlStack.myurl1 ... – umpirsky

1

Un enfoque muy simple y pragmática He estado usando, es poner algo como esto en la parte superior de cada página principal:

<script type="text/javascript"> 
    var baseUrl = '<%= Url.Resolve("~") %>'; 
</script> 

y después incluir todos sus archivos javascript después, usando baseUrl siempre que lo necesite.

+0

Gracias, Mookid por su respuesta. Este es de hecho un buen consejo que necesito aplicar. Pero lo que es más importante para mí es cómo url de código no duro en sí mismo, Inicio/Índice; Producto/ShowAll etc ... –

1

A menudo solo necesito el controlador actual y la acción en js. Es por eso que incluí esto en mi página maestra.

<script type="text/javascript"> 
    var controller = ''; 
    var action = ''; 
    controller = '<%= ViewContext.RouteData.GetRequiredString("controller")%>' ; 
    action = '<%= ViewContext.RouteData.GetRequiredString("action")%>' ; 
    </script> 
+0

que es una gran técnica, ha estado tratando de encontrar una forma de obtener el nombre del controlador de jquery – jaekie

Cuestiones relacionadas