2011-10-18 151 views
3

請參閱以下腳本。注意字符串'/ Home/Index'。使用T4MVC,有沒有一種方法來指定這個來擺脫魔法字符串?在JS功能中使用T4MVC

<script type="text/javascript"> 
    $(document).ready(function() { 
     $dialog = $('#dialog'); 
     $dialog.dialog({ 
      autoOpen: false, 
      buttons: { }, 
      open: function(event, ui) { 
       $(this).load("/Home/Index"); 
      } 
     }); 
    }); 
</script> 

回答

6

它這個,如果您的視圖是使用剃刀

@Url.Action(MVC.Home.Index()) 

所以,你的腳本將

<script type="text/javascript"> 
     $(document).ready(function() { 
      $dialog = $('#dialog'); 
      $dialog.dialog({ 
       autoOpen: false, 
       buttons: {}, 
       open: function (event, ui) { 
        $(this).load("@Url.Action(MVC.Home.Index())"); 
       } 
      }); 
     }); 
</script> 
-1

這樣做

$(this).load('<%:Url.Action("index","home") %>'); 
+0

,這只是做了正常的方式。 – Skuld

+0

我相信,請求會在找到它的目標之前經過路由過程,路由負責生成url。 –

+2

它會,但問題是,Url.Action(字符串,字符串)不是T4MVC,並且是正常的MVC方式。 T4MVC部分是用編碼值替換'魔術串',這樣當控制器/動作重新命名時,你會得到編譯時間錯誤而不是運行時錯誤。該文檔解釋最好http://mvccontrib.codeplex.com/wikipage?title=T4MVC_doc&referringTitle=T4MVC – Skuld

3

如果你的腳本是在單獨的.js文件(不在剃刀視圖中),你可以se T4MvcJS來處理這種情況。

它會看起來幾乎是一樣的詩蔻蒂的例子:

$(this).load(MvcActions.Home.Index()); 

,但它會是純JavaScript。

(T4MvcJs會生成一個JS-幫手 - 非常類似T4MVC)這就是不使用T4MVC

+0

嗯看起來像另一個我需要玩的nuget包。 – Skuld