2011-09-22 38 views
0

我有以下代码,我想将表标题放在@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 /> 

}

回答

4

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

+0

哇我觉得无知已经搞乱了20分钟。谢谢 ) – Jesse

3

短的答案:结束标记</table>必须放置foreach环的


龙答:你应该把Model.Count > 0foreach循环的,因为时刻,你在循环中输入代码块,Model.Count > 0结果始终为true,因为至少有一个项目。

如果 - 并且只有 - 如果 - 您的模型包含任何项目,才会打印出表头。之后,您在Model的每个item附加一行。 <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('.', ' '))从视图的移动到相应的控制器的动作。