Html助手可以在aspx中工作,但不能在剃刀中工作

本文关键字:工作 但不能 剃刀 Html aspx | 更新日期: 2023-09-27 18:29:21

这是最新的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代码与代码交织在一起。对于剃须刀,我将其转换为正确的语法编辑Razor代码

<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:只有赋值、调用、递增、递减、等待和新对象表达式才能用作语句

Html助手可以在aspx中工作,但不能在剃刀中工作

使用@item.PublicFileName而不是<%=item.PublicFileName%>并使用@:<text></text>来渲染html标签

所有的HTML助手方法都用于生成UI,因此它应该始终返回String。您的助手方法不返回任何内容。请查看MSDN上的以下文章。

相关文章: