【问题标题】:Html helpers works in aspx but not razorHtml 助手适用于 aspx 但不适用于 razor
【发布时间】:2015-01-02 04:02:30
【问题描述】:

这是最新的 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 似乎在 action 参数的最后一部分阻塞,其中 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:只有assignment、call、increment、decrement、await和new object表达式可以作为语句使用

【问题讨论】:

  • 有错误信息吗?这似乎很重要。否则,结果如何?看起来您只给了我们您的 Web 表单代码。你的 Razor 代码在哪里?
  • 等一下在这里stackoverflow.com/questions/4883034/…发现了一个类似的问题
  • @Joe 您的错误发生在哪一行?
  • 此行会抛出错误@ 删除“@”或替换为“@:”
  • 尝试删除表达式末尾的分号..

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


【解决方案1】:

使用@item.PublicFileName 而不是&lt;%=item.PublicFileName%&gt; 并使用@:&lt;text&gt;&lt;/text&gt; 渲染html标签

【讨论】:

  • 你必须明确告诉 razor 你正在编写 HTML,通过写 @: 或
【解决方案2】:

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

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签