获取不正确的剃刀语法错误

时间:2011-09-22 20:44:04

标签: asp.net-mvc asp.net-mvc-3 razor

我有以下代码,我想将表头放在@foreach之外,但是当我把它移到外面时它不再看到结束标记了。感谢

@foreach (var item in Model)
{           
<div class="data" ><label for="fullName" >Name: </label>@item.UserName.Replace('.', '')</div>          
if (Model.Count > 0)
{

<table class="data">
<tr>      
    <th>
        Work Date
    </th>
    <th>
        Change Details
    </th>
    <th>
        Ip Address
    </th>
    <th></th>
</tr>


<tr>           
    <td>            
    @{
    var stringDate = item.WorkDate.ToShortDateString(); 
    }
        @Html.DisplayFor(modelItem => stringDate)
    </td>
    <td>
         @Html.DisplayFor(modelItem => item.ChangeDetail)
    </td>    
     <td>
         @Html.DisplayFor(modelItem => item.IpAddress)
    </td>     
</tr>
</table>
}
<br />
<hr />

}

所以这就是我想要完成的事情,但无论我怎样尝试,它都会让我犯错误。

<table class="data">
<tr>      
    <th>
        Work Date
    </th>
    <th>
        Change Details
    </th>
    <th>
        Ip Address
    </th>
    <th></th>
</tr>

    @foreach (var item in Model)
{  

  <div class="data" ><label for="fullName" >Name: </label>@item.UserName.Replace('.','')</div>          
if (Model.Count > 0)
{


  <tr>           
    <td>            
    @{
    var stringDate = item.WorkDate.ToShortDateString(); 
    }
        @Html.DisplayFor(modelItem => stringDate)
    </td>
    <td>
         @Html.DisplayFor(modelItem => item.ChangeDetail)
    </td>    
     <td>
         @Html.DisplayFor(modelItem => item.IpAddress)
    </td>     
</tr>


</table>
}
<br />
<hr />

}

2 个答案:

答案 0 :(得分:4)

您必须在每个循环之外使用表格结束标记。

答案 1 :(得分:3)

简答:结束标记</table>必须放在foreach循环的 之外。


答案很长:您应该将Model.Count > 0置于foreach循环之外,因为您在循环中输入代码块的那一刻,Model.Count > 0始终会评估为真,因为你至少有一个项目。

如果 - 且仅当 - 您的模型包含任何项目,则打印出表头。之后,您为item中的每个Model添加一行。 <table></table>都必须在相同的嵌套级别内发生。

@if (Model.Count > 0)
{
    <table class="data">
        <tr>      
            <th>Date</th>
            <th>Change Details</th>
            <th>Ip Address</th>
            <th></th>
        </tr>

    @foreach (var item in Model)
    {           
        <div class="data" >
            <label for="fullName" >Name: </label>
            @item.UserName.Replace('.', ' ')
        </div>

        @{
            var stringDate = item.WorkDate.ToShortDateString(); 
        }

        <tr>           
            <td>@Html.DisplayFor(modelItem => stringDate)</td>
            <td>@Html.DisplayFor(modelItem => item.ChangeDetail)</td>    
            <td>@Html.DisplayFor(modelItem => item.IpAddress)</td>     
        </tr>
    }

    </table>

    <br />
    <hr />
}

您应该考虑将逻辑(@item.UserName.Replace('.', ' '))从视图中移出到相应的控制器操作中。