MVC3 Razor Foreach проблемы - PullRequest
       1

MVC3 Razor Foreach проблемы

3 голосов
/ 26 августа 2011

У меня есть модель, которая возвращает IEnumerable футбольных мячей для переменного числа пользователей. В связи с этим я динамически создаю HTML-таблицу с переменным количеством столбцов. В основном мои выборы вернутся вот так. Тем не менее, каждая игра будет повторяться для каждого пользователя, поэтому я добавляю только первые 3 столбца каждой строки таблицы один раз, а затем добавляю только один тег, пока gameID не изменится. Я знаю, что, вероятно, есть лучшие способы сделать это, но это всего лишь побочный проект, который мне нужно сделать быстро. И я просто хочу выяснить, почему это не работает.

    GameID
    GameDateTimeDisplay
    GameTeamDisplay
    WinningTeamDisplay
    PickedTeamAbbr

Хорошо, вот безумие, которое не работает. Я могу успешно создать заголовки таблиц, но тогда это не работает, но в каком-то странном месте происходит ошибка.

Мне пришлось поместить туда все @ Html.Raw (...), потому что у него были проблемы с поиском конечных тегов для foreach и операторов if без них.

В любом случае, вот мой код. Строка, которая вызывает исключение, такова: @gameID = @ pick.Game.GameID;

Исключение составляет -> Сообщение об ошибке компилятора: CS1525: недопустимый термин выражения '=' Intellisense показывает @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(!@firstGame){
                        <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 и т. Д. Также обернул назначение gameID в @ {}. Это теперь дает мне ошибку в этой строке, @ {gameID = @ pick.Game.GameID;}

Ошибка компиляции: CS1501: нет перегрузки для метода «Запись», принимает 0 аргументов

Вот обновленный код:

    @foreach(var pick in @Model.Picks) {
        @{gameID = @pick.Game.GameID;}
        if(@gameID != @lastGameID) { 
            if(!@firstGame){
                @:</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>

Ответы [ 3 ]

4 голосов
/ 26 августа 2011

Просто напишите

          @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

4 голосов
/ 26 августа 2011

Вам нужно окружить его { }, чтобы сделать его кодовым блоком

@{gameID = pick.Game.GameID;}

Кроме того, вам не нужно @ внутри операторов foreach / ifпотому что это кодовые блоки.

например, вы можете просто написать:

foreach(var name in Model.UserNames) {
2 голосов
/ 26 августа 2011

Я определил, что мой код представления 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...