2011-03-03 77 views

回答

0

由於該變量實際上並不存在於瀏覽器中,所以您的JavaScript運行時必須使用某種AJAX類型的技術。

簡單的舊ASMX Web服務可能是您最好的選擇。

當然,如果你只是想要它的初始值,你可以在頁面組合過程中將其設置爲文字。

雖然我沒有確切的格式化經驗。

6

你可以試試下面的辦法:

@{ 
    var array = new [] {"foo", "bar"}; 
} 

<script type="text/javascript"> 
    var array = [@Html.Raw(String.Join(",", array.Select(s => "'" + s + "'")))]; 

    alert(array[1]); 
</script> 

它系列化C#數組作爲一個JavaScript一個格式爲[「富」,「酒吧」。

+0

我正在開發Visual Studio 2010和MVC3 views.It的工作,但它強調@Html部分並說「條件編譯已關閉」 。我使用foreach填充cshtml中的var數組,並且項目數可能會不時變化。所以當序列化有可能運行一個循環??我怎麼做? – 2011-03-03 10:50:43

+0

@Html部分是HtmlHelper類型的一個屬性,不應該是一個問題。我所顯示的代碼可以處理任意大小的數組。代碼的作用是首先引用所有字符串,然後將它們加入,生成另一個字符串「foo」,「bar」,「baz」,該字符串在頁面中輸出。 – 2011-03-03 11:43:03

+0

如果我們有一個validationsummery作爲@ Html.ValidationSummary(true,「」);在@ {}標籤內,是否有可能將錯誤作爲字符串從@ {}標籤中的var變量中取出,然後從javascript中訪問?我怎麼做? – 2011-03-07 13:03:37

3

這是您可能想考慮使用JSON的最佳示例。假設你正在使用ASP.NET網頁(而不是Web窗體/ MVC),在你的App_Code目錄制定,創建一個名爲Javascript.cshtml的輔助文件,用下面的代碼:

@using System.Web.Script.Serialization; 

@helper ToJson(object obj) { 
    var ser = new JavaScriptSerializer(); 
    @Html.Raw(ser.Serialize(obj)) 
} 

現在,如果你的主頁你可以像這樣引用幫手:@Javascript.ToJson(myObj)。因此,在您的頁面上,您可能會這樣做:

@{ 
    var myCSharpObj = new { First = "1st", Second = "2nd" }; 
} 
<script language="javascript"> 
    var myJSObj = @Javascript.ToJson(myCSharpObj); 
    alert(myJSObj.Second); 
</script> 
+0

我只是做了幾乎完全相同的事情,只是意識到已經有一個內置的幫手! '@ Json.Encode'。它不會將它轉換爲「raw」,所以我創建了另一個助手,就像你的,但在裏面你可以放置'@ Html.Raw(Json.Encode(obj));'。 – mpen 2011-12-04 05:00:05