我有以下代码,我想将表头放在@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 />
}
答案 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('.', ' ')
)从视图中移出到相应的控制器操作中。