2011-03-11 73 views
2

有没有办法在旧的Asp.net viewengine中像这样在Razor视图引擎中嵌套模板 ?就我所知,Razor只支持一个级别的模板。如何在ASP.NET MVC Razor中使用嵌套内联模板?

-John

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

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

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

     <hr size=1 /> 

     <% 
    } 
); %> 

回答

3

更改功能采取Func<T, HelperResult>,然后通过@<li>@item</li>

编辑:例如:

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>) 
+0

你能提供示例代码吗?我无法实现它:| – user655260 2011-03-11 16:00:06

+0

@user:对不起;我的意思是“HelperResult”。这是一个例子。 – SLaks 2011-03-11 16:27:13

+0

其中是您在评论中引用的代码示例吗? 上面的示例仅使用1级...问题出现在第一个内嵌模板包含一个反过来包含另一个内嵌模板的方法时。然后Razor触发一个错误,说不允许嵌套模板。你知道解决这个问题的方法吗? – 2012-01-02 10:20:22