根据我的记录,我想在当前迭代中更改表格行的样式。
以下示例不起作用,但我该如何正确地执行此操作?
foreach (var item in Model)
{
@{
if (item.DataState != DataState.Active)
{
<tr style="background-color: red">
}
else
<tr>
}
<td>@item.Name</td>
</tr>
}
如此有效,我希望根据模型的DataState动态呈现<tr>
元素。
答案 0 :(得分:13)
这是一个较短的方法:
@foreach (var item in Model)
{
<tr @(item.DataState != DataState.Active ? "style=background-color:red" : "")>
<td>@item.Name</td>
</tr>
}
编辑:代码已修复
答案 1 :(得分:4)
您可以通过多种方式撰写条件。
选项1:
@foreach (var item in Model)
{
if (item.DataState != DataState.Active)
{
<tr style="background-color: red">
<td>@item.Name</td>
</tr>
}
else
{
<tr>
<td>@item.Name</td>
</tr>
}
}
选项2:
@foreach (var item in Model)
{
<tr style="@( item.DataState != DataState.Active ? "background-color: red;" : "" )">
<td>@item.Name</td>
</tr>
}
答案 2 :(得分:1)
定义变量中的属性。如果属性值为null
@foreach (var item in Model)
{
var attributes = item.DataState == DataState.Active ? null : "background-color: red";
<tr style=@attributes>
<td>@item.Name</td>
</tr>
}
答案 3 :(得分:0)
不确定你现在面临的是什么样的错误,但我认为你的问题是Razor不了解所有棘手的HTML渲染案例。
您可以强制他使用html
符号将@:
呈现为单个字符串或<text>
标记,如下所示:
@foreach (var item in Model)
{
if (item.DataState != DataState.Active)
{
@: <tr style="background-color: red">
}
else
{
<text><tr></text>
}
<td>@item.Name</td>
</tr>
}
答案 4 :(得分:0)
如果您开始在视图中拆分<tr>
标记,并且我不会复制大块代码,那么您可能会遇到编译错误。我会做以下事情:
@foreach(var item in Model) {
string strStyle=String.Empty;
if(item.DataState!=DataState.Active) { strStyle = "background-color:red;" }
<text>
<tr style="@strStyle">
<td>@item.Name</td>
</tr>
</text>
}
答案 5 :(得分:0)
@(item.DataState != DataState.Active ? "style=" + "background-color:red" : "")