2011-08-25 169 views
3

我已經得到了正在返回足球推介的IEnumerable的用戶數量可變的一種模式。由於這個原因,我正在動態構建一個可變列數的html表格。基本上,我的選擇會像這樣回來。然而,每場比賽將被重複每一個用戶,所以我只能將每個錶行的第3列一次,然後只添加一個標籤,直到遊戲ID的變化。我知道可能有更好的方法來做到這一點,但這只是我需要快速完成的一個副項目。而且,我只是想弄清楚爲什麼它不起作用。MVC3剃刀的foreach問題

GameID 
    GameDateTimeDisplay 
    GameTeamDisplay 
    WinningTeamDisplay 
    PickedTeamAbbr 

好的,所以這裏是瘋狂,不工作。我可以讓我的表頭成功創建,但然後tbody不工作,但它在一個奇怪的地方錯誤。

我不得不把所有的@ Html.Raw(...)的東西在裏面,因爲它是很難找到對foreach,如果沒有他們的語句的結束符。

總之,這裏是我的代碼。引起該異常的行是這樣的: @gameID = @ pick.Game.GameID;

例外是 - >編譯器錯誤消息:CS1525:無效的表達式'=' 智能感知將@gameID顯示爲變量,@ pick.Game.GameID看起來也是正確的。

<table> 
     <thead> 
      <tr> 
      <th>Game</th> 
      <th>Game Date/Time</th> 
      <th>Winner</th> 
      @foreach(var name in @Model.UserNames) { 
       <th>@name</th> 
      } 
      </tr> 
     </thead> 
     <tbody> 
      @{ 
      int lastGameID = 0; 
      int gameID = 0; 
      bool firstGame = true; 
      } 

      @foreach(var pick in @Model.Picks) { 
       @gameID = @pick.Game.GameID; 
       if(@gameID != @lastGameID) { 
        if([email protected]){ 
         <text>@Html.Raw("</tr>")</text> 
        } 
        @Html.Raw(
        <tr> 
         <td>@pick.GameTeamDisplay</td> 
         <td>@pick.GameDateTimeDisplay</td> 
         <td>@pick.Game.WinningTeam.TeamAbbr</td> 
         <td>@pick.PickedTeamAbbr</td>    
        ) 

       } 
       else { 
        @Html.Raw(<td>@pick.PickedTeamAbbr</td>) 
       } 
      }  
      @Html.Raw(</tr>) 

     </tbody> 
    </table> 

UPDATE: 我已經刪除了@ Html.Raw,等...還包裹在一個@的遊戲ID分配{}。它現在給我的錯誤在這條線上, @ {遊戲ID = @ pick.Game.GameID;}

編譯錯誤:CS1501:沒有重載方法「寫」取0參數

這裏是更新代碼:

@foreach(var pick in @Model.Picks) { 
     @{gameID = @pick.Game.GameID;} 
     if(@gameID != @lastGameID) { 
      if([email protected]){ 
       @:</tr> 
      } 

      @:<tr> 
       <td>@pick.GameTeamDisplay</td> 
       <td>@pick.GameDateTimeDisplay</td> 
       <td>@pick.Game.WinningTeam.TeamAbbr</td> 
       <td>@pick.PickedTeamAbbr</td>    
     } 
     else { 
      <td>@pick.PickedTeamAbbr</td> 
     } 
    }  
    </tr> 

回答

2

我確定我的Razor視圖代碼只是太複雜。真正的問題是,我試圖強制一個視圖與我爲另一個視圖創建的模型一起工作。我最終創建了一些專門針對此視圖的更多模型。代碼更清潔,並且最好的工作原理!這是我結束的代碼。

<table> 
     <thead> 
      <tr> 
      <th>Game</th> 
      <th>Game Date/Time</th> 
      <th>Winner</th> 
      @foreach(var name in @Model.UserNames) { 
       <th>@name</th> 
      } 
      </tr> 
     </thead> 
     <tbody> 
      @foreach(var game in @Model.Games) { 
       <tr> 
        <td>@game.GameDescription</td>      
        <td>@game.GameDisplayDateTime</td>      
        <td>@game.GameWinner</td>      
        @foreach(var pick in game.GamePicks){ 
         <td>@pick.PlayerPick</td> 
        }     
       </tr>    
      } 
     </tbody> 
    </table> 
4

您需要{}包圍它,使其代碼塊

@{gameID = pick.Game.GameID;} 

而且,因爲他們的代碼塊,你不需要foreach/if語句中的@

例如你可以這樣寫:

foreach(var name in Model.UserNames) { 
+0

我補充說,它擺脫了這個問題,然後就行了,@ Html.Raw(炸燬了....現在它告訴我,「<」是無效字符。我刪除了@ Html.Raw,它再次告訴我,我的foreach沒有右括號。 –

4

只要寫

  @foreach(var pick in Model.Picks) { 
       <tr> 
        <td>@pick.GameTeamDisplay</td> 
        <td>@pick.GameDateTimeDisplay</td> 
        <td>@pick.Game.WinningTeam.TeamAbbr</td> 
        <td>@pick.PickedTeamAbbr</td>    
       </tr> 
     } 

你不需要@裏面的代碼塊。您可以使用@:代替<text>, Html.Raw
,您可以在這裏看到Razor syntax reference