2009-09-15 11 views
5

ragazzi Hallo,modo migliore per non hardcode URL quando si utilizza ASP.NET MVC con jQuery

sto usando ASP.NET MVC con jQuery e sta andando alla grande, per ora. Solo, c'è una domanda che mi dà fastidio. Come dovrei gestire gli URL nei metodi jquery? Io davvero non vorrei codice difficile, come qui:

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

Si consiglia vivamente di utilizzare metodi di supporto HTML per creare collegamenti in MVC, come Html.ActionLink, Html.BeginForm modo nel caso in cui il cambiamento qualcuno che HomeController è mappato su MyHome invece di Home non ci saranno problemi.

Quindi, come non codificare l'url come nell'esempio?

Inoltre, non desidero utilizzare Ajax ASP.NET perché sono d'accordo con questa risposta asp-net-ajax-vs-jquery-in-asp-net-mvc.

Grazie

risposta

6

Si potrebbe definire più variabili JavaScript globali:

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

che sarà utilizzato in seguito dai metodi $ GetJSON.

+0

Questo sembra un buon modo per farlo. Grazie –

+0

Forse dovresti evitare l'ambito globale, meglio lo spazio dei nomi in (ad es. AjaxUrlStack.myurl1 ... – umpirsky

1

Un approccio molto semplice e pragmatico ho utilizzato, è quello di mettere qualcosa di simile nella parte superiore di ogni pagina master:

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

e quindi includere tutti i file javascript in seguito, usando baseUrl ogni volta che ne ha bisogno.

+0

Grazie, Mookid per la risposta. Questo è davvero un buon consiglio che devo applicare. Ma quello che è più importante per me è il modo in cui non scrivere codice hard in sé, Home/Index; Prodotto/ShowTutti ecc ... –

1

Spesso ho bisogno solo del controller e dell'azione corrente in js. Ecco perché ho incluso questo nella mia MasterPage.

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

questa è una grande tecnica, cercavo di trovare un modo per ottenere il nome del controller da jquery – jaekie

Problemi correlati