【问题标题】:How to use nested inline templates in ASP.NET MVC Razor?如何在 ASP.NET MVC Razor 中使用嵌套的内联模板?
【发布时间】:2011-03-11 11:42:04
【问题描述】:

有没有办法在 Razor 视图引擎中嵌套模板,例如 像这样在旧的 Asp.net 视图引擎中?据我所知,Razor 仅支持一级模板。

-约翰

   <%Html.Do(new string[]{"Chris","John"}, name =>
    { 
        %>

        <li><%=name%></li>

        <%Html.Do(new string[]{"Beer","Fries"}, stuff => { 
            %>
            <li><%=stuff%></li>
            <% 
        }); %>

        <hr size=1 />

        <% 
    }
); %>

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

    将您的函数更改为采用Func&lt;T, HelperResult&gt;,然后传递@&lt;li&gt;@item&lt;/li&gt;

    编辑:例如:

    public static IHtmlString Do<T>(this HtmlHelper html, IEnumerable<T> items, Func<T, HelperResult> template) {
        return html.Raw(String.Join("\n", items.Select(o => template(o).ToString())));
    }
    

    在剃刀中:

    @Html.Do(new []{"Beer","Fries"}, @<li>@item</li>)
    

    【讨论】:

    • @user:对不起;我的意思是HelperResult。这是一个例子。
    • 您在评论中引用的代码示例在哪里?上面的示例仅使用 1 级...当第一个内联模板包含一个方法,而该方法又包含另一个内联模板时,问题就出现了。然后 Razor 触发错误,指出不允许嵌套模板。你知道解决这个问题的方法吗?
    • @FrancescoAbbruzzese:不; Razor 不支持嵌套的内联助手(隐式参数会发生冲突)。您可以将外部内联帮助程序的内容移动到普通帮助程序。
    • 真诚的..我不明白他们为什么要设置这个限制....我不认为“item”隐式参数的冲突是原因。名称冲突可能已使用通常的“范围”规则处理......即“项目”的范围是它所在的最内层......VS智能感知也能够理解范围......所以它可能会给关于“项目”的正确建议。
    • @FrancescoAbbruzzese:不;那不会编译。 (试试看)Razor 转换器没有连接到 C# 解析器,所以解决起来并不容易。另请参阅my blog
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多