2012-04-11 124 views
0

我要么得到“你需要一个;这里”或“最佳重载匹配有无效参数”的错误。这个Razor语法为什么会出现编译错误?

 <tbody> 
      <tr> 
      @for (int i = 0; i < startDay; ++i) 
      { 
       @:<td><span></span><span></span></td> 
      } 
      @for (int j = startDay; j < ((numberOfDays + startDay) - 1); ++j) 
      { 
       <td> 
        <span>@startCount</span> 
        <br /> 
        <span> 
         @{ 
          var todaysEvents = Model.ToList().FindAll(d => d.CalDate.Day == j); 
          foreach(HTMLMVCCalendar.Models.CalendarModel eventsToday in todaysEvents) 
          { 
           foreach(HTMLMVCCalendar.Models.EventModel eventToday in eventsToday.CalEvents) 
           { 
            @eventToday.DayCode.ToString // error here 
            @:<br /> 
            @eventToday.Subject // error here 
            @:<br /> 
            @eventToday.EventDesc //error here 
           } 
           @:<br /> 
          } 
         } 
        </span> 
       </td> 
       if ((j + 1) % 7 == 0) 
       { 
        @:</tr><tr> 
       } 
       @++startCount; 
      } 
      </tr> 
     </tbody> 

回答

4

使用<text>元素,而不是每一件你想要显示的文字之前,使用@。转换:

foreach(HTMLMVCCalendar.Models.EventModel eventToday in eventsToday.CalEvents) 
{ 
    @eventToday.DayCode.ToString // error here 
    @:<br /> 
    @eventToday.Subject // error here 
    @:<br /> 
    @eventToday.EventDesc //error here 
} 

要:

foreach(HTMLMVCCalendar.Models.EventModel eventToday in eventsToday.CalEvents) 
{ 
    <text> 
     @eventToday.DayCode:<br /> 
     @eventToday.Subject:<br /> 
     @eventToday.EventDesc 
    </text> 
} 

我也去掉了.ToString(这是缺少括号),因为对象是使用@符号时转换为字符串含蓄。

另一件事,你有这样的代码:

@{ 
    var todaysEvents = Model.ToList().FindAll(d => d.CalDate.Day == j); 
    foreach(HTMLMVCCalendar.Models.EventModel eventToday in eventsToday.CalEvents) 
    { 
     ... 
    } 
} 

这不必要地增加你的嵌套。与我们的直觉相反,以@开头的Razor块实际上并不像在C#中那样形成一个封闭范围。因此,你可以把它写成:

@{ 
    var todaysEvents = Model.ToList().FindAll(d => d.CalDate.Day == j); 
} 
@foreach(HTMLMVCCalendar.Models.EventModel eventToday in todaysEvents.CalEvents) 
{ 
    ... 
} 

正如你可以看到(如果你运行它),todaysEvents仍可访问。

相关问题