Html帮助程序在aspx中工作但不是razor

时间:2014-11-05 20:04:45

标签: c# asp.net asp.net-mvc razor html-helper

这是最新的mvc 5.2

这里是几年前从一个被遗忘的博客使用的代码的助手

    public static void SeriesSplitter<T>(this System.Web.Mvc.HtmlHelper htmlHelper, IEnumerable<T> items,
                                         int itemsBeforeSplit, Action<T> template, Action seriesSplitter)
    {
        if (items == null)
            return;
        if (items.Count() == 0)
            return;
        var i = 0;
        foreach (var item in items)
        {
            if (i != 0 && i % itemsBeforeSplit == 0)
                seriesSplitter();
            template(item);
            i++;
        }
    }

我像这样使用它

 <table class="public-photo" >  
  <tr class="public-photo">    
       <% Html.SeriesSplitter(Model.Photos, 6, item => { %>              
          <td class="public-photo">

          <a href="/Anon/DisplayPublicPhoto/?filename=<%=item.PublicFileName%>"  class="public-photo" >
       <%if(Model.HighRes == true){%>       
        <img src="/t2/<%=item.PublicFileName%>" id="<%=item.PublicFileName%>"  class="public-photo" alt="thumbnail" width="140" height="105"  />
         <%}
         else
         {%>
        <img src="/t/<%=item.PublicFileName%>" id="<%=item.PublicFileName%>"  class="public-photo" alt="thumbnail" width="140" height="105"  />

        <% }  %>
        </a>
        <a href="#" class="ReportPhoto" id="<%=item.PhotoID%>">Report this</a>
        </td>
                   <%}, () => { %>
  </tr>
   <tr>
      <% }); %>  
   </tr>
        </table>   

在aspx中没有问题,但是razor似乎在动作参数的最后部分窒息,其中html代码与代码交织在一起。对于剃刀我将其转换为正确的语法 编辑剃刀代码

<table class="public-photo">
    <tr class="public-photo">
        @Html.SeriesSplitter(Model.Photos, 6,  icetem =>
         { 
            @<td class="public-photo">

    <a href="/Anon/DisplayPublicPhoto/?filename=@icetem.PublicFileName " class="public-photo">
        @if (Model.HighRes == true)
                     {
            <img src="/t2/@icetem.PublicFileName" id="@icetem.PublicFileName" class="public-photo" alt="thumbnail" width="140" height="105" />

                     }
       else
         {
            <img src="/t/@icetem.PublicFileName" id="@icetem.PublicFileName" class="public-photo" alt="thumbnail" width="140" height="105" />

            }
    </a>
    <a href="#" class="ReportPhoto" id="@icetem.PhotoID">Report this</a>
</td>;
       },
       () => {
   //</tr>
   // <tr>
        });
    </tr>
</table>

错误是CS0201:只能将赋值,调用,递增,递减,等待和新对象表达式用作语句

2 个答案:

答案 0 :(得分:0)

使用@item.PublicFileName而非<%=item.PublicFileName%> 并使用@:<text></text>呈现html标记

答案 1 :(得分:0)

所有HTML帮助器方法都用于生成UI,因此它应该始终返回String.your Helper方法不返回任何内容。请查看MSDN.

中的以下文章