Razor支持lambda表达式吗?

Phi*_*rie 17 asp.net-mvc lambda razor

Razor视图引擎是否支持lambda表达式/匿名方法?

我在Razor中难以表达以下内容:

@Model.ToList().ForEach(i =>
    {
        if (i.DealerName != null) 
        {
            <text> 
                @i.DealerName
            </text>
        }
    }
Run Code Online (Sandbox Code Playgroud)

注意: 我知道可以解决这个问题,@foreach但我需要一个类似的第三方MVC控件解决方案.它使用此机制来设置控件的内容.它适用于MVC .ASPX视图,但无法使其与Razor一起使用.


MVC .ASPX等效(我想转换为Razor语法的代码):

<% Model.ToList().ForEach(i =>
       {
           if (i.DealerName != null)
           { 
           %> <%=i.DealerName%> <%
           };
       }); 
%>
Run Code Online (Sandbox Code Playgroud)

这适用于ASP.NET MVC3附带的Razor引擎.

Art*_*aru 11

而不是你的<text>@i.DealerName</text>块,你可以使用Response.Write(i.DealerName);

结果是一样的,就像你在Razor页面中删除它一样 - 它将在渲染页面时执行..坦率地说 - 我很确定这就是它将被编译成的东西.

此外,由于ForEach()返回void,您必须将其作为代码块放在页面中.所以你的代码看起来像这样:

@{
    Model.ToList().ForEach(i =>
    {
        if (i.DealerName != null) 
        {
            Response.Write(i.DealerName);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

UPD:如果你有更严肃的格式,你可以诉诸这个漂亮的小技巧:(
不幸的是,这里的代码着色不会给这个片段任何功劳,但你肯定会明白我的意思,如果你把它放在visual studio中. :这只适用于Razor页面,而不是代码文件:))

@{
    Model.ToList().ForEach(i =>
    {
        if (i.DealerName != null) 
        {
            Response.Write(((Func<dynamic, object>)(
                @<text>
                    <b>Hello Dealer named: @item.DealerName
                    Multiline support is <em>Beautiful!</em>
                </text>)).Invoke(i));
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

希望有道理:)