2016-06-27 2 views
1

Я пытаюсь создать таблицу с 7 строками и 27 столбцами. Самый высокий столбец должен находиться в верхней части таблицы.таблица в бритве, строки в зависимости от базы данных

модель выглядит следующим образом:

public partial class tblShelve 
{ 
    public int id { get; set; } 
    public string name { get; set; } //For example B-01-07 means column 1, row 7 
    public int capacity { get; set; } // I am using this to style the cells 
    public int row { get; set; } 
    public int column { get; set;} 
} 

Мои HomeController возвращает это:

private ScanningContext db = new ScanningContext(); 

// GET: Home 
public ActionResult Index() 
{ 
    return View(db.tblShelves 
     .Where(x => x.name.StartsWith("B")) 
     .OrderByDescending(x => x.column) 
     .ThenBy(x => x.row) 
     .ToList() 
     ); 
} 

И мой Index.cshtml код выглядит следующим образом

@model IEnumerable<Shelves_Visualisation.Models.tblShelve> 
... 
    <table> 

      @foreach (var item in Model) 
      { 

        if (item.name.StartsWith("B-01")) 
        { 
         @:<tr class="my-tr"> 
         //old: <tr class="my-tr"> 
        } 

        @switch (item.capacity) 
        { 
         case (0): 
          <td class="classic-height my-td empty">@item.name</td> 
          break; 
         case (50): 
          <td class="classic-height my-td half-full">@item.name</td> 
          break; 
         default: 
          <td class="classic-height my-td full">@item.name</td> 
          break; 
        } 


       @if(item.name.StartsWith("B-27")) 
       { 
        @:</tr> 
        //old: </tr> 
       } 
      } 
    </table> 

Но это только создает пустая страница. Visual Studio говорит мне, что элемент <tr> не был закрыт, а </tr> не имеет соответствующего начального тега. Любые идеи, как это исправить? (Response.Write не вариант, так как он просто выводит вывод в начало страницы за пределами тега <body>). Без условий на <tr> тег работает, поэтому я знаю, что ошибка должна быть где-то там.

Результат должен выглядеть следующим образом: enter image description here

Я получил это от статического HTML, который я создал, как это:

<table> 
     @for (int i = 7; i > 0; --i) 
     { 
      <tr> 
       @for (int j = 1; j < 28; ++j) 
      { 
       switch (rnd.Next(0, 3)) 
       { 
        case (0): 
          <td class="classic-height my-td full">[email protected]("{0,2:D2}", j)[email protected]("{0,2:D2}", i)</td> 
          break; 
         case (1): 
          <td class="classic-height my-td half-full">[email protected]("{0,2:D2}", j)[email protected]("{0,2:D2}", i)</td> 
          break; 
         default: 
          <td class="classic-height my-td empty">[email protected]("{0,2:D2}", j)[email protected]("{0,2:D2}", i)</td> 
          break; 
        } 
       } 
      </tr> 
     } 
    </table> 
+1

Используйте '@: ' и '@:' –

+0

@StephenMuecke благодарит, что это помогло с этими жалобами Visual Studio, но не с пустой страницей. – Dracke

+0

Если вы попробуете: var x = db.tblShelves . Где (x => x.name.StartsWith ("B")) .OrderByDescending (x => x.column) .ThenBy (x => x.row) .ToList() ); вы уверены, что данные возвращаются –

ответ

1

Использование Tr тегов в Html.raw в этом формате @Html .Raw ("") , а также для закрытия тэга тега, то есть @ Html.Raw ("")

Редактировать: Пришлось использовать его для тегов <td>.

+0

Помогает с Visual Studio жаловаться, но не на всю проблему. – Dracke

+2

Пришлось использовать его также для '' тегов. – Dracke

Смежные вопросы