2012-06-04 82 views
1

我試圖用C# in javascript就像我們在MVC Razor View使用@ sign使用它,使用C#代碼在JavaScript

像假設的array name list傳遞給View所以我們可以訪問它在View,如:

查看

 Length of array : <input type="text" value="@Model.list.Length" /> 

        Or we can iterate list array also like: 

     @for(int i=0; i< Model.list.Length; i++) 
     { 
      console.log(Model.list[i]); 
     } 

但我的問題是我們如何可以遍歷或C寫的JavaScript使用這個數組賦,類似的東西:

JS

 for(var i=0; i<@Model.list.Length; i++) 
     { 
     $("body").append("<h1></h1>").html(@Model.list[i]); 
     } 

謝謝!

+1

您(通常)無法在客戶端(通常運行Javascript)運行C#。 – hugomg

+0

這就像在車內騎自行車一樣。兩者都是車輛,他們有獨立的道路。 C#在服務器上運行。 JS在瀏覽器中運行。 – core1024

+0

爲了做到這一點,你需要一個預處理器,將'C#'命令翻譯成本地js。對於普通值來說這是相當容易的,對於複雜對象來說這很複雜。如果您的預處理器能夠將'C#'-Object轉換爲'JS'對象,那麼您可以執行此操作。如果沒有,你不能,因爲你將無法訪問數組的值。 – Christoph

回答

1

正如我貼在我的評論,這是一個有點棘手。不過,你可以嘗試用你的c#構造一個javascript對象。

像這樣的東西(我不知道這是如何工作究竟...):

var array = [ 
    @for(var i = 0; i < Model.list.Length-1; i++){ @Model.list[i] , } 
    @Model.list[length] 
] 

這將導致:

var array = [ 
     val1, 
     val2, 
     val3, 
     valn 
] 

現在你有一個JS變種array,你可以在你的整個文檔中使用。

+1

應該注意的是,如果這些值是字符串,它將不會自動生成引號,因此它們將作爲變量而不是字符串進行處理。否則,很好,乾淨的答案。 – Toast

0

你不能這樣做。你可以做的是使用C#生成的JavaScript代碼的每一行是這樣的:

//...javascript code... 

@for(var i = 0; i < Model.list.Length; i++) 
{ 
    $("body").append("<h1></h1>").html('@(Model.list[i])'); 
} 

//...more javascript code... 

這應該是這樣的輸出:

//...javascript code... 

$("body").append("<h1></h1>").html(listitem0); 
$("body").append("<h1></h1>").html(listitem1); 
$("body").append("<h1></h1>").html(listitem2); 
//etc. 

//...more javascript code... 
+0

非常討厭... – Christoph

+0

也許是這樣,但它可以做到。 – Toast

+0

我想它是更清潔的構造js數組並循環它。 – Christoph