与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; 
    } 
} 
+2

小心与我们分享语法错误? –

剃刀不能这样工作。 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标记。