2009-11-14 41 views
2

我正在使用ASP.NET MVC並希望在我的javascript中使用Model信息。我強烈地輸入了視圖,因此可以在我的HTML中使用<%= Model.Name %>來獲取模型數據。在javascript中嵌入使用<%= code %>的C#代碼<script>標籤

但是,一旦我在<script>標記中,當使用<%時,我不會收到intellisense(在Visual Studio中),並且信息似乎無法正確呈現。有沒有什麼我能夠在Javascript中使用尖括號方案?

謝謝。

CLARIFICATION:我應該發佈我第一次嘗試使用的代碼。爲了詳細闡述一下,我試圖使用JQuery的$ .getJSON從Model中獲取數據(通過Controller),並填充一個JSON對象。我使用的JavaScript低於:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.getJSON("<%=Url.Action("PopulateJournalOptions", "Evaluation", Model.ID) %>", populateJSON); 
    }); 
</script> 

PopulateJournalOptions是我的控制器動作,評價是我的控制器名稱,並Model.ID是什麼,我想傳遞給它。順便說一句,我應該能夠實現使用同一件事:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.getJSON("/Evaluation/PopulateJournalOptions/<%= Model.ID %>", populateJSON); 
    }); 
</script> 

但即使在這裏,我不知道那些尖括號的使用是否正確。它絕對看起來有點偏離。謝謝您的幫助。

UDPATE:繼續前進,嘗試了上面的第二種方法,它確實有效。我仍然無法使用第一個使用Url.Action()的方法,這是一個恥辱,因爲我認爲這是更好的方法。但是<%標籤現在肯定會呈現數據。我猜這只是在沒有智能感覺的時候扔給我,而且他們沒有像正常人那樣突出顯示。感謝您的快速回復。有關上述第一個選項的正確格式的任何想法?

+1

發佈一些代碼。沒有什麼能阻止你在JavaScript裏面使用<%=%>。 2008年沒有智能支持(不知道他們是否在2010年解決了這個問題)。沒有代碼示例,就沒有辦法提供幫助。 –

+0

張貼在帖子編輯中的代碼。 –

回答

2

一般來說,<%=%>塊應該只能在Javascript中使用引號。由於您在引用文本中,因此Intellisense可能無法正常工作。

2

它應該工作 - 你的C#應該在JavaScript做客戶端之前執行服務器端。智能感知可能會被上下文混淆。

我有時會在PHP和JavaScript中使用這種技術。

0

你可以嘗試單引號:

$.getJSON('<%=Url.Action("PopulateJournalOptions", "Evaluation", Model.ID) %>', populateJSON); 
1

您需要將字符串寫入到腳本標記時要小心,因爲它是JavaScript中的預期是,該字符串有正確編碼的特殊字符。此外,如果該字符串包含「</script>」之類的字詞,則可能會導致未運行JavaScript的瀏覽器提早結束腳本塊。

編碼字符串的簡單方法是使用JSON序列化程序,也許是JavaScriptSerializer()。

<script> 
    var targetUrl = <%= (new JavaScriptSerializer()).Serialize("http://url/") %>; 
</script> 

我覺得這樣比較安全。你想把這段代碼放在一個輔助函數中,我只是在那裏實例化JavaScriptSerializer(),所以它是最簡單的例子。

這樣做的一個副作用是<%=%>表達式不在引號內,這聽起來像會幫助您的原始自動完成支持發佈。請注意,Serialize()不僅會正確地轉義javascript字符串,還會對'<'和'>'字符進行轉義編碼,以避免發生「</script>」情形。

1

糾正我,如果我錯了,但我從來沒有見過Url.Action像這樣使用:

<%= Url.Action("PopulateJournalOptions", "Evaluation", Model.ID) %> 

它不應該是這樣嗎?

<%= Url.Action("PopulateJournalOptions", "Evaluation", new { ID = Model.ID }) %> 

新{ID = Model.ID}

Url.Action使用上的對象的屬性反射找出路由值。由於int對象沒有字段/屬性,因此它不會檢測到任何內容。

相關問題