我是ASP.NET/MVC3的新手,我試圖弄清楚如何將HTML(其中包含C#)與其他HTML分開。在cshtml剃刀視圖中分離JavaScript
如果我把它們放入.JS文件並用腳本標記插入它們,那麼它們的C#方面停止工作。在MVC 3 razor中分離也包含C#代碼的JavaScript代碼的最佳方式是什麼?
謝謝。
我是ASP.NET/MVC3的新手,我試圖弄清楚如何將HTML(其中包含C#)與其他HTML分開。在cshtml剃刀視圖中分離JavaScript
如果我把它們放入.JS文件並用腳本標記插入它們,那麼它們的C#方面停止工作。在MVC 3 razor中分離也包含C#代碼的JavaScript代碼的最佳方式是什麼?
謝謝。
如果在引用外部js文件時任何事情停止工作,也許你做錯了什麼。向我們提供一些關於如何引用外部文件的示例代碼。另一種方法是將JavaScript代碼放在文件某處的腳本標籤之間。如果它位於_Layout.cshtml中,您可以將它放在頭標籤和另一個cshtml文件中,將它放在腳本標籤之間。
Javascript代碼應該不是包含任何動態生成的代碼。如果您需要在某些配置設置中加載,則應使用定義變量的單個內聯腳本標記。其他選項將在動態生成的json配置文件中加載,或者根據dom內容進行加載,具體取決於您所需的特定動態信息。 (Ajax是我想說的最常見的方式,儘管這實際上取決於你的情況)。無論哪種方式,這個想法是,JavaScript和CSS文件是總是靜態。
由於多種原因,你最好把大部分,如果不是所有的JS到單獨的JS文件(這樣就可以利用再利用,縮小,瀏覽器的優化,內容分發網絡等)
的要讀取的服務器端剃刀碼結果到您的JS文件使用下列方法之一:
1)把你的剃刀代碼到一個JavaScript變量在視圖(未測試代碼)
<script type="text/javascript">
if(!MyGlobalVariables){
MyGlobalVariables = {};
}
MyGlobalVariables.IndexUrl = "@Url.Action("Index")";
</script>
2)使用自定義屬性(最好以數據爲前綴,如HTML 5 spec中所建議的那樣)。在這裏看到相關討論:Can I add custom attribute to HTML tag?
<div data-index-url="@Url.Action("Index")"></div>
然後,使用$(本).attr jQuery中(「數據索引網址」)來訪問所呈現的剃刀的標記。
3)將C#放入隱藏的輸入字段在您的視圖中,並閱讀您的JS文件中的隱藏輸入。
<input id="indexUrl" type="hidden" value="@Url.Action("Index")" />
要在jQuery的閱讀,你可以使用$( 「#indexUrl」)。VAL()
正如其他人所說編寫C#到您的.js文件可能是心不是各種原因,最好的辦法如緩存動態變量。但有時我們都必須做我們不應該做的事情。如果是這樣的話,那麼就有一個NuGet包,它允許你在a中編寫Razor語法。js文件它可以在這裏找到http://nuget.org/packages/RazorJS
相反,做這樣的事情在您的視圖頁面:
var options = {
parameter1 : '@(SomeC#Value)',
parameter2 : '@(SomeC#Value)',
parameter3 : '@(SomeC#Value)',
}
然後調用類似:
myJavascriptObject.init(options);
,並有JavaScript中使用傳入的選項控制流量等。
我們將C#對象轉換爲Json,並在對象和JavaScriptSerializer上使用擴展:
public static string ToJson(this object item)
{
return new JavaScriptSerializer().Serialize(item);
}
然後我們送把它放在一個變量(或在我們的情況下,它傳遞給JavaScript的控制器的構造函數)
爲什麼你在你的JavaScript的一個*'C#aspect' *?你不應該。 – 2012-03-13 10:50:40