Razor 支持 lambda 表达式吗?

2024-05-03

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

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

@Model.ToList().ForEach(i =>
    {
        if (i.DealerName != null) 
        {
            <text> 
                @i.DealerName
            </text>
        }
    }

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

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

<% Model.ToList().ForEach(i =>
       {
           if (i.DealerName != null)
           { 
           %> <%=i.DealerName%> <%
           };
       }); 
%>

这是针对 ASP.NET MVC3 附带的 Razor 引擎。


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

结果是相同的,就好像您将其放入 Razor 页面中一样 - 它将在渲染页面时执行。坦率地说 - 我很确定这就是它将被编译成的内容。

另外,自从ForEach()返回 void,您必须将其作为代码块放入页面中。 所以你的代码看起来像这样:

@{
    Model.ToList().ForEach(i =>
    {
        if (i.DealerName != null) 
        {
            Response.Write(i.DealerName);
        }
    });
}

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));
        }
    });
}

希望这是有道理的:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Razor 支持 lambda 表达式吗? 的相关文章

随机推荐