2009-09-15 11 views
5

Hallo chłopaki,Najlepszy sposób nie hardcode URL podczas używania ASP.NET MVC z JQuery

Używam ASP.NET MVC z jQuery i to będzie wielki teraz. Po prostu jedno pytanie mnie dręczy. Jak obsługiwać adresy URL w metodach jquery? I naprawdę nie chciałbym w nim kodu twardego, jak tutaj:

$(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); 
      }); 
     }); 
    }); 

Jest wysoce zalecane, aby użyć metody pomocnika HTML do tworzenia powiązań w MVC, jak Html.ActionLink, Html.BeginForm tak w przypadku, gdy zmiana ktoś że HomeController jest mapowany na MyHome zamiast Home, nie będzie problemu.

Jak więc nie zakodować adresu URL tak jak w przykładzie?

Ponadto, nie chcę używać Ajax ASP.NET, ponieważ zgadzam się z tą odpowiedzią asp-net-ajax-vs-jquery-in-asp-net-mvc.

Dzięki

Odpowiedz

6

Można zdefiniować wiele zmiennych globalnych javascript:

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

które zostaną wykorzystane później metodami $ .getJSON.

+0

To wygląda na dobry sposób na zrobienie tego. Dzięki –

+0

Może powinieneś unikać globalnego zasięgu, lepszego obszaru nazw w (np.) AjaxUrlStack.myurl1 ... – umpirsky

1

Naprawdę proste i pragmatyczne podejście używam, jest umieścić coś takiego na górze każdej strony wzorcowej:

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

a następnie obejmować wszystkie pliki JavaScript potem przy użyciu baseUrl, gdy jest to potrzebne.

+0

Dzięki, Mookid za odpowiedź. Jest to rzeczywiście dobra rada, którą muszę zastosować. Ale ważniejsze jest dla mnie to, jak nie sam adres strony kodowej, Home/Index; Product/ShowAll etc ... –

1

Często potrzebuję tylko bieżącego kontrolera i akcji w js. To dlatego zawarłem to na mojej stronie MasterPage.

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

to świetna technika, próbujesz znaleźć sposób na pobranie nazwy kontrolera z jquery – jaekie

Powiązane problemy