2013-01-15 54 views
1

我有一個ASP.NET MVC4應用程序使用jQuery在同一個項目中對WebApi控制器進行一些調用。將ID傳遞給控制器​​,/MyController/123應該在加載頁面時顯示不同的數據。問題是我不知道如何讓這個ID傳遞給jQuery。它本身不是查詢字符串參數,所以this將不起作用。我想要的是來自URL的「123」。有沒有一種通用/標準的方法來做到這一點,只是斬斷網址?獲取傳遞給控制器​​的「id」爲javascript

+0

鑑於調整正則表達式,我認爲http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values將工作。 –

回答

1

你可以把它放在一個ViewBag對象在控制器,ViewBag.PassedId = ID,然後在前端使用剃刀或任何視圖發動機的方法將其放置到一個JavaScript變量,

<script> 
var id = @(ViewBag.PassedId); 
</script> 

或者你可以將它附加到一個隱藏的表單元素並獲取值。但是你會綁定一個對象模型從控制器傳遞。

+1

這正是我所期待的!我從來沒有想過用JavaScript混合Razor代碼。謝謝! –

0

我做了一個更新的答案在傑羅米鏈接到問題的一個對我的項目之一:

(function ($) { 
    //http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values 
    //usage $.QueryString["param"] 
    $.QueryString = (function (a) { 
     if (a == "") return {}; 
     var b = {}; 
     for (var i = 0; i < a.length; ++i) { 
      var p = a[i].split('='); 
      if (p.length != 2) continue; 
      b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " ")); 
     } 
     return b; 
    })(window.location.search.substr(1).split('&')); 

    $.mvcId = (function (a.toLowerCase()) { 
     //usage $.mvcId("Bar"); /Foo/Bar/162 (Gets 162) 
     var b = location.href.toLowerCase(); 
     var c; 
     if (a != "") { 
      a += "/"; 
      c = b.lastIndexOf(a); 
      if (~c) { // ~ = truthy http://stackoverflow.com/questions/1789945/javascript-string-contains 
       b = b.substring(c, b.length); 
      } 
      else { 
       throw "didn't match querystring"; 
      } 
     } 
     c = b.lastIndexOf("/"); 
     var id = b.substring(c + 1, b.length); 
      return id; 
    }); 
})(jQuery); 

所以用它作爲

//url is /foo/bar/123 
var foo = $.mvcId("bar"); 

返回123

相關問題