ASP.NET MVC4中cshtml文件中的解析错误

时间:2013-05-31 14:10:36

标签: c# asp.net-mvc asp.net-mvc-4 razor

在视图中,我试图连续显示最多5张图像。 我们的想法是通过使用</tr><tr> html标签来关闭当前行并启动一个新行来引入一个新行,如下所示,但这会产生一个Parser错误。

  

分析器错误消息:代码块缺少结束“}”   字符。确保所有人都有匹配的“}”字符   “{”此块中的字符,并且没有“}”字符   被解释为标记。

我该如何纠正?

<table>
    <tr>     
        @{   
            int indx = 0;
            foreach(var item in Model) { 
                indx++;                                   
                <td>
                    <a href ="@Url.Action("ShowPic", "ViewPhotos", new { id = item.ID })"> 
                        <img src="@String.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(item.Image))" /> 
                    </a>            
                    <br />                       
                    @Html.DisplayFor(modelItem => item.Caption) 
                </td>
                if(indx%5==0) {
                     </tr><tr><!--Error here-->
                }

                }
            }                  
    </tr>
</table>

感谢。

2 个答案:

答案 0 :(得分:3)

尝试将此添加到相关行

@: </tr><tr><!--Error here-->

由于您将其包装在HTML标记元素中,因此Razor无法确定if中的内容是内容块的开头。通过使用@:,我们指出语句的内容应该被视为内容。

答案 1 :(得分:0)

您的第一个<tr>和最后一个</tr>超出了其开始/结束标记的范围:

<table>
    @{   
        <tr>
            int indx = 0; foreach (var item in Model) { indx++;
            <td>
                <a href ="@Url.Action("ShowPic", "ViewPhotos", new { id = item.ID })">
                    <img src="@String.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(item.Image))" />
                </a>
                <br />
                @Html.DisplayFor(modelItem => item.Caption)
            </td>
            if(indx%5==0) {
        </tr>
        <tr>
            } }
        </tr>    
    }
</table>