2015-07-09 57 views
0

我從網絡拉數據列表並將我的數組放入我的下拉菜單。我使用的剃刀劇本,我得到第4行出現以下錯誤:c#razor錯誤:名稱'我'不存在於這個當前的上下文

The name 'i' does not exist in this current context 

這裏是我的代碼:

var select = document.getElementById('propertyMenu'); 
      for (var i = 0; i < @Model.propertiesArray.Length; i++) 
      { 
       var property = "@Model.propertiesArray[i]" 
       var element = document.createElement('option'); 
       element.textContent = property; 
       element.value = property; 
      } 

現在我知道,用「@」符號允許您從訪問類我的模型在我的JavaScript通過C#。所以我的猜測是,除非我給它某種指令,否則Javascript變量'i'將不可訪問。

如何在上下文中訪問我的int計數'i'?

編輯:

我回答了我自己的問題。

+5

這基本上是不可能的。您需要了解_client-side_ code和_server-side_ code之間的區別。 – SLaks

+0

'現在我知道使用'@'符號允許您在我的javascript內訪問我的模型中的類 - 不,這不會發生。您可以生成JavaScript並在過程中使用'@',但在JavaScript的運行時不能引用'@'。 – GSerg

+0

@SLaks,你不可能更正確。我計算出來併發布了我的答案。謝謝。 –

回答

1
var propertiesArray = new Array(); 
@foreach (var props in Model.propertiesArray) 
{ 
    @:propertiesArray.push("@props"); 
} 

var select = document.getElementById("propertyMenu"); 
for (var i = 0; i < propertiesArray.length; i++) 
    { 
     var property = propertiesArray[i]; 
     var element = document.createElement('option'); 
     element.textContent = property; 
     element.value = property; 
     select.appendChild(element); 
    } 
+2

不要這樣做。相反,將該數組轉儲爲JSON文字並將其用於純Javascript中。 – SLaks

+0

@SLaks,我編輯了我的答案。是的,這樣做效果更好。這樣做有任何性能相關的原因嗎?再次感謝。 –

+0

你有一個XSS洞。使用JSON序列化程序轉儲整個數組。 – SLaks

0

不能告訴你的代碼是C#還是JS。

您可能必須這樣做,這樣

var select = document.getElementById('propertyMenu'); 
     for (var i = 0; i < @Model.propertiesArray.Length; i++) 
     { 
      var property = @Model.propertiesArray[i].toString(); 
      var element = document.createElement('option'); 
      element.textContent = property; 
      element.value = property; 
     } 
0

因爲你使用的Javascript代碼。你可以試試這個。

@{ 
    string values = ""; 
    for(int i=0;i<Model.propertiesArray.Length;i++) 
     values += Model.propertiesArray[i].ToString()+(i!=Model.propertiesArray.Lenght-1)?",":""; 
} 

<script> 
var value = '@values'; 
var values = value.split(','); 
var select = document.getElementById('propertyMenu'); 
    for (var i = 0; i < values .length; i++) 
    { 
     var property = values[i]; 
     var element = document.createElement('option'); 
     element.textContent = property; 
     element.value = property; 
    } 
</script> 

我寫了Stackoverflow編輯器。

相關問題