2015-10-23 3 views
0

Я борюсь с использованием переменных в JavaScript в представлении MVC. У меня есть код, который я использую для обработки объектов View Model и извлечения count с помощью запроса linq, но для этого мне нужно использовать цикл @foreach в моем JavaScript. Затем мне нужно использовать результат моего цикла снаружи, чтобы сделать из него график. Вот мой цикл:Доступ к внешним переменным изнутри цикла @foreach

function getCount() 
{   
    var counta = 0; 

    @foreach (var item in Model.AccountList) 
    { 
     var listCount = @Model.List.Where(s => s.Id == 1).Count(); 
     counta += listCount;       
    } 
}; 

Я хотел бы знать, как я могу использовать переменную counta внутри цикла Еогеасп или объявить статическую переменную, которая доступна внутри цикла и при выходе из цикла сохраняет это значение ,

+0

Возможно, вам придется заглянуть в закрытие ... – AdamJeffers

+0

«Я хотел бы знать, как я могу использовать переменную« counta »внутри цикла foreach!» Вы уже ... вы добавляете listCount к нему в цикле. Вы хотите получить доступ к «counta» за пределами функции getCount()? – AdamJeffers

+0

'@foreach (элемент var в Model.AccountList)' - это код бритвы, который оценивается на сервере до его отправки клиенту 'counta' - это переменная javascript на стороне клиента, которая даже не существует в этой точке (ее не в области) –

ответ

2

Вы сбиты с толку, потому что у вас смешанные переменные JS и ASP.NET.
код в foreach является всегда интерпретируется , как C# код

function getCount() // JS function 
{   
    var counta = 0; // JS variable 

    @foreach (var item in Model.AccountList) // C# loop 
    { 
     var listCount = @Model.List.Where(s=> s.Id ==1).Count(); // C# variable 
     // here, you are trying to add C# integer to JavaScript variable. it is impossible 
     counta += listCount; 
    } 
} 

Как решить эту: Вычислить его на стороне сервера и просто вывести его в JavaScript:

@{ // It's all C# code 
    var count = 0; 
    foreach (var item in Model.AccountList) 
    { 
     var listCount = Model.List.Where(s=> s.Id == 1).Count(); 
     count += listCount;       
    } 
} 

<script> 
    var counta = @(count); // JS counta variable is equal to C# calculated "count" 
    console.log(counta); 
</script> 

Это будет:

<script> 
    var counta = 17; // for example 
    console.log(counta); 
</script> 

Для каждой сгенерированной страницы она будет постоянной.

+0

СПАСИБО ЛООООТО !!!! Я искал несколько страниц, чтобы найти решение .. И НАКОНЕЧНО было так просто, как это ... @YeldarKurmangaliyev я найду u .., и я дам двуглавую хвалу, спасибо человеку: D –