'x' 是 'variable' 但用法与 'method' 类似

'x' is a 'variable' but is used like a 'method'

我正在为一个奇怪的情况而苦苦挣扎。我有一组要在 Razor 中迭代的页面。我需要做两次,一次在脚本标签内,一次在脚本标签外。现在,我知道 Razor 是为了生成 HTML 而不是 Javascript 但这工作正常,现在它坏了,我不明白为什么。这是中断的代码:

<script type="text/javascript">
    @foreach (string page in pages)
    {
        <text>
        function @page() {
            // something here
        }
        </text>
    }
</script>

这很好用:

<div class="intro">
    @foreach (string page in pages)
    {
        <div id="@page">
            <!-- whatever -->
        </div>
    }
</div>

Compiler Error Message: CS0118: 'page' is a 'variable' but is used like a 'method'

并指向@page的使用。事实上 VS13 也用红色波浪线表示变量 但仅在第一种情况下 !

这是怎么回事?

尝试

<script type="text/javascript">
@foreach (string page in pages)
{
    <text>
    function @(page)() {
        // something here
    }
    </text>
}

哈哈!我想到了。它需要一个该死的 space,或者某种表达式终止符:

<text>
function @page () {

(注意@page 之后的 space,它向 Razor 表明表达式已经结束),或者:

<text>
function @(page)() {

当然,IDE 仍然抱怨需要一个标识符(函数名称),但那是因为它并不意味着生成 Javascript