Asp.net mvc 获取不正确的razor语法错误

Asp.net mvc 获取不正确的razor语法错误,asp.net-mvc,asp.net-mvc-3,razor,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) { &

我有下面的代码,我想把表头放在@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 />
}简短回答:结束标记必须放在foreach循环的外部

详细回答:您应该将Model.Count>0放在foreach循环之外,因为当您在循环中输入代码块时,Model.Count>0总是计算为true,因为您至少有一项

如果(且仅当)模型包含任何项,则打印出表格标题。然后,为模型中的每个项目追加一行。两者都必须发生在相同的嵌套级别内

@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。用户名。“替换”,“”从视图中进入相应的控制器动作。

< P>你必须在每个循环的外面有你的表结束标签。< / P>哇,我感觉不知道有20分钟。谢谢