与ASP.NET MVC Razor语法结合使用
问题描述:
构建一个快速视图,该视图将显示所有日期的列表,但仅在星期几发生更改时才显示标题。为什么我通过foreach得到语法错误?任何帮助将不胜感激!与ASP.NET MVC Razor语法结合使用
@{
int lastDay = 0;
}
@foreach (var grouping in Model.EventTemplate.EventTemplateSlots) {
if (grouping.Day != lastDay) {
if (lastDay != 0) {
</div>
}
<div style="margin: 5px;"><div class="ui-widget-header ui-corner-all" style="padding: 5px;">@(((DateTime)Model.StartDate).AddDays(grouping.Day).ToShortDateString())</div>
lastDay = grouping.Day;
}
}
答
剃刀不能这样工作。 HTML元素不能像你一样分开。你有一个裸体</div>
:
if (lastDay != 0) {
</div>
}
这是无效的,因为HTML标记都需要进行类似匹配到C#括号(他们需要在嵌套和结束标记同级别不能开始标记之前词汇出现)。我不清楚你为什么使用lastDay
检查。为什么不把它写出来而不是像这样呢?
@foreach (var grouping in Model.EventTemplate.EventTemplateSlots) {
if (grouping.Day != lastDay) {
<div style="margin: 5px;">
<div class="ui-widget-header ui-corner-all" style="padding: 5px;">@(((DateTime)Model.StartDate).AddDays(grouping.Day).ToShortDateString())</div>
</div>
}
}
这样,开始/结束HTML标签就会根据需要进行匹配。
答
您的模型是否实施IEnumerable
?如果不是,您将无法在foreach
循环中迭代它。
你正在看到什么错误?请在你的问题中发布。
答
这应该工作:
@{
int lastDay = 0;
<div style="margin: 5px;">
@foreach (var grouping in Model.EventTemplateSlots)
{
if (grouping.Day != lastDay)
{
<div class="ui-widget-header ui-corner-all" style="padding: 5px;">
@(((DateTime)Model.StartDate).AddDays(grouping.Day).ToShortDateString())
</div>
lastDay = grouping.Day;
}
}
</div>
}
剃刀更喜欢HTML标记,以解析观点正确匹配。
另请注意,在您的示例中,如果在EventTemplateSlots集合中没有重复的日期,则永远不会收到结束的div标记。
小心与我们分享语法错误? –