ddgjgj Ответов: 4

Как сделать отображение 3-х предметов в ряд на основе цикла с ASP.NET MVC5


Как сделать отображение 3-х предметов в ряд на основе цикла с Asp.Net
@model  IEnumerable<CMSFC.Models.ContentHtml>

Я пробовал это сделать, но ничего не вышло. Это ошибка, с которой я сталкиваюсь:
Server Error in '/' Application.

Parser Error

Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: The foreach block is missing a closing "}" character. Make sure you have a matching "}" character for all the "{" characters within this block, and that none of the "}" characters are being interpreted as markup.

Source Error: 
Line 35: @{var counter = 0; }
Line 36: 
Line 37: @foreach (var item in Model)
Line 38: {
Line 39: 

Source File: /Views/ContentHtml/Tabelar.cshtml Line: 37

Я хочу показать 3 Id-s подряд.

Что я уже пробовал:

@model  IEnumerable<CMSFC.Models.ContentHtml>


<table>
    @{var counter = 1; }
    <tr>
        @foreach (var item in Model){
            <td>
                @Html.DisplayFor(modelItem => item.Id)
            </td>
            if(counter % 3 == 0){
                @:
            </tr>
            <tr>
             }
            counter++;
        }
    </tr>
</table>

4 Ответов

Рейтинг:
32

Graeme_Grant

Вы не поделились ошибкой, с которой столкнулись, но у меня есть довольно хорошая идея, что это как-то связано с этим:

@model  IEnumerable<CMSFC.Models.ContentHtml>

вы не можете перебирать объект, только набор объектов. Таким образом, вышеприведенная строка должна быть:
@model IEnumerable<CMSFC.Models>

ОБНОВЛЕНИЕ: У вас есть синтаксическая ошибка в коде razor. Ошибка указывает на то, что синтаксический анализатор видит отсутствующий синтаксис - вы должны увидеть красную волнистую линию на этой строке кода:
@Html.DisplayFor(modelItem => item.Id)

Даже если вы находитесь на HTML-странице, язык razor по-прежнему имеет те же синтаксические правила, что и C#. Таким образом, из приведенной выше строки довольно легко увидеть, что эта строка кода не заканчивается символом ';Так и должно быть:
@Html.DisplayFor(modelItem => item.Id);


ddgjgj

можете ли вы предоставить полный код

Graeme_Grant

Я не понимаю этой просьбы.

ddgjgj

Это код:

модель объекта IList&л@; cmsfc.модели.contenthtml&ГТ;


@{счетчик var = 0; }

@по каждому элементу (ВАР деталь в модели)
{

если (счетчик % 3 == 0)
{
@:


}
@счетчик++;
}


@Html. DisplayFor(modelItem => item.Id)





И вот в чем ошибка:

Ошибка сервера в приложении'/'.

Ошибка Парсера

Описание: во время синтаксического анализа ресурса, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, ознакомьтесь со следующими конкретными деталями ошибки синтаксического анализа и соответствующим образом измените исходный файл.

Сообщение об ошибке парсера: в блоке foreach отсутствует закрывающий символ"}". Убедитесь, что у вас есть соответствующий символ "}" для всех символов "{" в этом блоке и что ни один из символов "}" не интерпретируется как разметка.


Ошибка Источника:


Строка 35: @{var counter = 0; }
Строка 36:
Строка 37: @foreach (var item in Model)
Строка 38: {
Строка 39:

Исходный файл: /Views/ContentHtml / Tabelar.cshtml строка: 37

Graeme_Grant

Это была ключевая информация, отсутствующая в вашем вопросе. Без этого у нас не было ни малейшего шанса узнать, в чем ваша проблема. Вы меня понимаете???

Я перенес ошибку обратно в вопрос для вас и обновлю свое решение обновленным ответом.

Richard Deeming

Razor не нуждается в завершающей точке с запятой для встроенных операторов, таких как @Html.DisplayFor(...). Если вы включите его, он будет включен в вывод HTML. :)

Краткий справочник по синтаксису C# Razor / Вы были взломаны[^]

Рейтинг:
20

Richard Deeming

Цитата:
@:
</tr>
<tr>

Скорее всего, проблема в этих линиях. Либо все они должны быть в одной строке, либо каждый тег должен иметь префикс @:.
@model  IEnumerable<CMSFC.Models.ContentHtml>

<table>
    @{ var counter = 1; }
    <tr>
        @foreach (var item in Model){
            <td>
                @Html.DisplayFor(m => item.Id)
            </td>
            if(counter % 3 == 0){
                @:</tr>
                @:<tr>
            }
            counter++;
        }
    </tr>
</table>

asp.net mvc 3-Razor не понимает незамкнутые html-теги-переполнение стека[^]

Кроме того, вы можете использовать LINQ для группировки элементов, что может упростить разметку:
<table>
    @foreach (var group in Model
        .Select((item, index) => new { item, key = index / 3 })
        .GroupBy(p => p.key, p => p.item))
    {
        <tr>
            @foreach (var item in group)
            {
                <td>
                    @Html.DisplayFor(m => item.Id)
                </td>
            }
        </tr>
    }
</table>


Рейтинг:
19

koklimabc

Никогда не используйте DispalyFor() для отображения элемента в ienumarable items. или у вас есть итерация из метаданных модели.

@foreach (var item in Model){

   <tr>
     @if(count % 3 == 0)
     {
        <td>
          @:
        </td>
     }
     else
     {
       <td>
          @item.id
       </td>
     }
    </tr>
}


ddgjgj

В нем говорится следующее :

Ошибка Парсера

Описание: во время синтаксического анализа ресурса, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, ознакомьтесь со следующими конкретными деталями ошибки синтаксического анализа и соответствующим образом измените исходный файл.

Сообщение об ошибке парсера: ": "недопустимо в начале блока кода. Допустимы только идентификаторы, ключевые слова, комментарии, "(" и" {".


Ошибка Источника:


Строка 12: {
Строка 13:
Строка 14: @:
Строка 15:
Строка 16: }

Рейтинг:
11

koklimabc

я думаю, что ты все еще новичок на С#,

if(counter % 3 == 0){
                @:
            </tr>
            <tr>
             }


Не нужно c++ считать внутри цикла foreach и не совпадать с началом

следите за моей образца у вас может,


ddgjgj

Не работать

Richard Deeming

Если это не работает, почему вы приняли решение?

Вы должны отметить решение как "принятое" только в том случае, если оно решает вашу проблему.