在嵌套条件中混合 HTML 和 Razor 代码
Mixing HTML and Razor Code Within Nested Conditionals
我正在尝试将 Razor 与一些嵌套条件一起使用,这是迄今为止 Razor 和 HTML 迄今为止我尝试过的最复杂的混合,我承认我还不是 Razor 的专家.我遇到这种类型的 Razor 解析错误:"Only assignment,call,decrement,increment, etc, can be used as a statement..."
似乎我使用了太多的“@”,但如果我在此处删除它@
,我会收到更多错误,提示需要一个语句并且符号 "td" 无法解析。我认为 Razor 足够聪明,知道 HTML 何时出现在代码块中?我显然没有给 Razor 它需要的东西。
第一个解析错误发生在"@<td rowspan="@total">N/A</td>;"
@foreach (var customerId in customerIds)
{
var attendance = records.Where(x => customerIds.Contains(x.Customer.CustomerId)).ToList();
var total = attendance.Count();
if (total > 0)
{
<tr>
@{
var i = 0;
attendance.ForEach(x =>
{
if (i == 0)
{
@<td rowspan="@total">@x.Customer.CustomerFullName</td>;
@<td rowspan="@total">N/A</td>;
}
@<td>@x.Event.EventTitle</td>;
@<td>@x.AttendanceStartDate.ToString("MM/dd/yy")</td>;
@<td style="width: 10%; text-align: center">
}
}
}
}
</tr>
只有在使用 .NET 时才需要 @ 符号; HTML 不应该有 @ 符号。从所有 <td>
标签中删除它。
这意味着一个 .NET 块:
@{
int x = 1;
x++;
@: This (@:) breaks out of .NET and says that this text is plain HTML
x--; //back to .NET
}
此外,您没有关闭 table 行标记,这可能会引发您看到的一些额外错误。
if (total > 0)
{
<tr>
@{
var i = 0;
attendance.ForEach(x =>
{
if (i == 0)
{
<td rowspan="@total">@x.Customer.CustomerFullName</td>;
<td rowspan="@total">N/A</td>;
}
<td>@x.Event.EventTitle</td>;
<td>@x.AttendanceStartDate.ToString("MM/dd/yy")</td>;
<td style="width: 10%; text-align: center">
}
}
编辑:哇哦,attendance.ForEach() 正在尝试修改出勤对象的每个元素;它不会遍历每个元素。我想你想要另一个 foreach 循环而不是调用 Object.ForEach().
- 您不需要将
@
和 ;
before/after DOM 元素放入您的 Razor 块中(即 @{ }
)。
这里有一个很好的 link 来理解如何在代码块中组合文本、标记和代码
- 要循环
attendance
中的每个项目,您需要使用 for
循环(如果不需要递增计数器,则使用 foreach
循环)。
- 缺少最后一个 TD 元素的结束标记。
你可以试试这个:
foreach (var customerId in customerIds)
{
var attendance = records.Where(x => customerIds.Contains(x.Customer.CustomerId)).ToList();
var total = attendance.Count();
if (total > 0)
{
<tr>
@for (var i = 0; i < total; i++)
{
var x = attendance[i];
if (i == 0)
{
<td rowspan="@total">@x.Customer.CustomerFullName</td>
<td rowspan="@total">N/A</td>
}
<td>@x.Event.EventTitle</td>
<td>@x.AttendanceStartDate.ToString("MM/dd/yy")</td>
<td style="width: 10%; text-align: center"></td>
}
</tr>
}
}
我正在尝试将 Razor 与一些嵌套条件一起使用,这是迄今为止 Razor 和 HTML 迄今为止我尝试过的最复杂的混合,我承认我还不是 Razor 的专家.我遇到这种类型的 Razor 解析错误:"Only assignment,call,decrement,increment, etc, can be used as a statement..."
似乎我使用了太多的“@”,但如果我在此处删除它@
第一个解析错误发生在"@<td rowspan="@total">N/A</td>;"
@foreach (var customerId in customerIds)
{
var attendance = records.Where(x => customerIds.Contains(x.Customer.CustomerId)).ToList();
var total = attendance.Count();
if (total > 0)
{
<tr>
@{
var i = 0;
attendance.ForEach(x =>
{
if (i == 0)
{
@<td rowspan="@total">@x.Customer.CustomerFullName</td>;
@<td rowspan="@total">N/A</td>;
}
@<td>@x.Event.EventTitle</td>;
@<td>@x.AttendanceStartDate.ToString("MM/dd/yy")</td>;
@<td style="width: 10%; text-align: center">
}
}
}
}
</tr>
只有在使用 .NET 时才需要 @ 符号; HTML 不应该有 @ 符号。从所有 <td>
标签中删除它。
这意味着一个 .NET 块:
@{
int x = 1;
x++;
@: This (@:) breaks out of .NET and says that this text is plain HTML
x--; //back to .NET
}
此外,您没有关闭 table 行标记,这可能会引发您看到的一些额外错误。
if (total > 0)
{
<tr>
@{
var i = 0;
attendance.ForEach(x =>
{
if (i == 0)
{
<td rowspan="@total">@x.Customer.CustomerFullName</td>;
<td rowspan="@total">N/A</td>;
}
<td>@x.Event.EventTitle</td>;
<td>@x.AttendanceStartDate.ToString("MM/dd/yy")</td>;
<td style="width: 10%; text-align: center">
}
}
编辑:哇哦,attendance.ForEach() 正在尝试修改出勤对象的每个元素;它不会遍历每个元素。我想你想要另一个 foreach 循环而不是调用 Object.ForEach().
- 您不需要将
@
和;
before/after DOM 元素放入您的 Razor 块中(即@{ }
)。 这里有一个很好的 link 来理解如何在代码块中组合文本、标记和代码 - 要循环
attendance
中的每个项目,您需要使用for
循环(如果不需要递增计数器,则使用foreach
循环)。 - 缺少最后一个 TD 元素的结束标记。
你可以试试这个:
foreach (var customerId in customerIds)
{
var attendance = records.Where(x => customerIds.Contains(x.Customer.CustomerId)).ToList();
var total = attendance.Count();
if (total > 0)
{
<tr>
@for (var i = 0; i < total; i++)
{
var x = attendance[i];
if (i == 0)
{
<td rowspan="@total">@x.Customer.CustomerFullName</td>
<td rowspan="@total">N/A</td>
}
<td>@x.Event.EventTitle</td>
<td>@x.AttendanceStartDate.ToString("MM/dd/yy")</td>
<td style="width: 10%; text-align: center"></td>
}
</tr>
}
}