从@foreach循环中访问外部变量

时间:2015-10-23 08:32:56

标签: javascript linq model asp.net-mvc-5

我正在努力在MVC视图中使用JavaScript中的变量。我有用于处理View Model对象并使用linq查询提取计数的代码,但为了做到这一点,我必须在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;                           
    }
};

我想知道如何在foreach循环中使用counta变量或声明在循环内访问的静态变量,当离开循环时保持它的值。

1 个答案:

答案 0 :(得分: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>

对于每个生成的页面,它将是一个常量。