2009-09-15 55 views
5

你好,當使用ASP.NET MVC與JQuery時,不硬編碼url的最佳方式

我使用ASP.NET MVC與jQuery,它現在很好。只是,有一個問題困擾着我。我應該如何處理jquery方法中的url?我真的不喜歡硬編碼,喜歡這裏:

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

強烈建議使用HTML輔助方法來創建MVC的鏈接,如Html.ActionLink,Html.BeginForm這樣的情況下,有人變化HomeController被映射到MyHome而不是Home,這將不會有問題。

那麼,如何不像在例子中硬編碼的網址?

此外,我不想使用ASP.NET Ajax,因爲我同意這個答案asp-net-ajax-vs-jquery-in-asp-net-mvc

感謝

回答

6

你可以定義多個全局JavaScript變量:

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

這將在稍後由$ .getJSON方法一起使用。

+0

這看起來像一個很好的方法來做到這一點。謝謝 – 2009-09-15 10:40:03

+0

也許你應該避免全球範圍,更好的命名空間他們在(例如)ajaxUrlStack.myurl1 ... – umpirsky 2011-02-11 21:52:23

1
我一直在使用

一個非常簡單的和務實的態度,是把這樣的事情在每一個母版頁的頂部:

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

,然後再把包含所有的JavaScript文件,每當需要時使用baseUrl

+0

謝謝,Mookid回覆。這確實是我需要應用的好建議。但是對我來說更重要的是如何不去硬編碼url本身,Home/Index;產品/ ShowAll等... – 2009-09-15 09:43:23

1

我經常只需要當前的控制器和js中的動作。這就是爲什麼我將它包含在我的母版頁中。

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

多數民衆贊成在一個偉大的技術,一直試圖找到一種方法來從jquery獲取控制器名稱 – jaekie 2010-06-11 18:09:55

相關問題