我在使用相当复杂的Table和Razor标签时遇到了一些问题。
我把“@”取出来了。 (例如,在if等前面。)
我玩了大约30分钟,我似乎无法找到方法。我总会得到错误/或类似没有任何结束标记。我玩@:等等,但是无法得到它。
如果有人可以帮助我,如果有人可以对@:标签做出正确的解释,我会非常感激。
<div>
if (Model.dsInfoUser.Tables[0].Rows.Count != 0)
{
<table>
for (int i = 0; i < Model.dsInfoUser.Tables[0].Rows.Count; i++)
{
if (i % 2 == 1)
{
<tr class="tableEven">
}
else
{
<tr class="tableOdd">
}
@*Picture*@
if (i == 0)
{
<td rowspan="@Model.dsInfoUser.Tables[0].Rows.Count" class="tblPicture"><img src="@Model.dsInfoUser.Tables[0].Rows[i][1]" /></td>
}
<td>
@Model.dsInfoUser.Tables[0].Rows[i][0].ToString()
</td>
<td>
@Model.dsInfoUser.Tables[0].Rows[i][1].ToString()
</td>
</tr>
if (i == 5)
{
<tr>
<td>
<text>Member Of:</text>
</td>
<td>
<table>
for (int j = 0; j < Model.dsInfoUser.Tables[1].Rows.Count; j++)
{
if (j % 2 == 1)
{
<tr class="tableEven">
}
else
{
<tr class="tableOdd">
}
<td rowspan="3">
<div style="width: 400px; overflow-y: scroll">
</div>
</td>
</tr>
</table>
</td>
</tr>
}
</table>
}
</div>
对于任何想知道的人,这是固定版本:
<div>
@if (Model.dsInfoUser.Tables[0].Rows.Count != 0)
{
<table>
@for (int i = 0; i < Model.dsInfoUser.Tables[0].Rows.Count; i++)
{
<tr class="@(i % 2 == 1 ? "tableEven" : "tableOdd")">
@if (i == 0)
{
<td rowspan="@Model.dsInfoUser.Tables[0].Rows.Count" class="tblPicture"><img src="@Model.dsInfoUser.Tables[0].Rows[i][1]" /></td>
}
<td>
@Model.dsInfoUser.Tables[0].Rows[i][0].ToString()
</td>
<td>
@Model.dsInfoUser.Tables[0].Rows[i][1].ToString()
</td>
</tr>
if (i == 5)
{
<tr>
<td>
<text>Member Of:</text>
</td>
<td>
<table>
@for (int j = 0; j < Model.dsInfoUser.Tables[1].Rows.Count; j++)
{
<tr class="@(i % 2 == 1 ? "tableEven" : "tableOdd")">
<td rowspan="3">
<div style="width: 400px; overflow-y: scroll">
</div>
</td>
</tr>
}
</table>
</td>
</tr>
}
}
</table>
}
</div>
答案 0 :(得分:10)
你不能这样做。 Razor期望适当的分层。特别是,这是非法的:
if(condition)
{
<foo>
}
else
{
<foo>
}
</foo>
尽管我们都知道这是一个结构良好的<foo></foo>
,但是剃刀并没有这样看待它。它会看到2个未关闭的<foo>
,以及完全不相关的 </foo>
。
在您的情况下,执行此操作的方法是:
<tr class="@(i % 2 == 1 ? "tableEven" : "tableOdd")">
<td>...</td>
</tr>
答案 1 :(得分:1)
if (i % 2 == 1)
{
<tr class="tableEven">
}
else
{
<tr class="tableOdd">
}
可能是给你带来麻烦的东西
您应该能够将其重写为
string className = i%2 == 1 ? "tableEven" : "tableOdd"
<tr class="@className">
让解析器满意