2011-09-23 15 views
1

我願做這樣的事情在CoffeeScript中,這樣我可以運動離開我所有的腳本到咖啡文件:如何在Coffeescript文件中使用Razor表達式?

$("#btnFinish").click -> 
    $.post "@Url.Action("Submit", "Process")", (response) -> 
     $("#PlaceHolderButton") 
      .button() 
      .text response 

$("#btnHome").click -> 
    window.location.href='@Url.Action("Index","Home")' 

如果我只是推了網址和其他項目,我需要隱入值,並詢問他們腳本運行的後期?

我覺得我缺少一個關鍵的概念或在這裏。

回答

3

儘量避免混合JavaScript與服務器端的需要。總是有更好的解決方法。例如:

@Html.ActionLink("Some button", "Submit", "Process", null, new { id = "btnFinish" }) 

,然後在你的JS:

$('#btnFinish').click(function() { 
    $.post(this.href, function(response) { 
     ... 
    }); 
    return false; 
}); 

,或者如果btnFinish是一些DIV的,你不能使用一個輔助生成一個URL,你可以使用HTML5數據 - *屬性,像這樣:

<div id="btnFinish" data-url="@Url.Action("Submit", "Process")">Some button</div> 

然後:

$('#btnFinish').click(function() { 
    var url = $(this).data(url);  
    $.post(url, function(response) { 
     ... 
    }); 
    return false; 
}); 

但如果你有一些可點擊的按鈕,你AJAXify第一種方法將語義上更好,因爲你直接有網址作爲href的一部分。

同樣的道理適用於你的第二個例子:

$('#btnHome').click(function() { 
    window.location.href = $(this).data('url'); 
}); 

所以,你不再需要在你的JavaScript文件中的任何服務器端代碼。您的js完全是靜態的,合併,縮小,壓縮,緩存,從內容交付網絡提供服務以及與此相關的所有優勢。

0

那麼,要將Razor直接嵌入到JavaScript中,您需要JavaScript在瀏覽器切換到瀏覽器之前通過Razor視圖引擎進行評估。目前沒有發生,但可以完成。 隱藏字段的方法 - - <script type="text/javascript>...</script>視圖

你可以用它最後的方法,並進行配置管理插件,將採取在鍵值:

我解決這個曾與這些方法在視圖中,並提供一種方法從視圖外的JavaScript中查詢它們。

還有RazorJS這可以用的NuGet:

http://nuget.org/List/Packages/RazorJS

寫剃刀樣式C#或VB.NET insde JavaScript文件。還包含一個http處理程序,用於在需要時提供這些文件。

相關問題