【问题标题】:Difference between Razor single statement and blockRazor 单语句和块的区别
【发布时间】:2013-09-19 15:43:46
【问题描述】:

为什么第一段有效,第二段在标签标签处抛出“无效的表达式术语'<'错误?

第一段:

@foreach( var f in new List<List<string>>{ new List<string>{ new List<string>{ "PumpSize", "Pump Size" },
new List<string>{ "PumpType", "Pump Type" }, 
new List<string>{ "WellHead", "Well Head" } } )
{
    <label>@f[1]
    </label>
}

第二段:

@{
    var fields = new List<List<string>>{ new List<string>{ new List<string>{ "PumpSize", "Pump Size" },
        new List<string>{ "PumpType", "Pump Type" }, 
        new List<string>{ "WellHead", "Well Head" } };
    fields.ForEach( f => 
    {
        <label>@f[1]</label>
    } );
}

我得到的错误是&lt;label&gt;,“无效的表达式术语'&lt;'。

如果重要的话,我的浏览器是 IE9。

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

    问题在于ForEach 是一个接受 lambda 表达式的方法,因此,您不能在此范围内传递视图(或一段 html)代码。我建议您使用简单的foreach 循环。

    @foreach(var field in fields) {
       <label>@field[1]</label>
    }
    

    如果您对这种方法有疑问,也可以使用&lt;text&gt; razor 标签。

    @{
    
      foreach(var field in fields) {
        <text> 
           <label>@field[1]</label>
        </text>
      }
    
    }
    

    【讨论】:

    • 是的,foreach 有效。但是,您是说 Razor 不了解如何处理 lambda 表达式?看起来你是对的,但你知道为什么吗?我知道这是不一样的,但我到处都看到像 @Html...(x => x...) 这样的代码。
    • 原因是,您不能将剃刀上下文传递给特定类型的 lambda 表达式。也许你可以创建一个 Razor Helper 方法:stackoverflow.com/questions/14328303/…
    猜你喜欢
    • 2011-09-23
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多