2013-07-21 8 views
30

Próbowałem wszystkich proponowanych do innych podobnych pytań rozwiązanie, ale żaden z nich nie wydaje się działać. W istocie próbuję wyświetlić tabelę wypełnioną danymi z kolekcji modeli. To samo w sobie nie stanowi problemu, jednak chciałbym zmusić maszynę do generowania jej zawsze w 3 kolumnach (bez względu na to, ile elementów mamy). Mój oryginalny pomysł, żeby zrobić to w ten sposób:Razor - HTML.RAW nie wyjście tekstowe

<table class="projects-grid"> 
    <tr> 
    @for(int i = 0; i< Model.Count(); i++) 
    { 
     if (i != 0 && i % 3 == 0) 
     { 
      Html.Raw("</tr><tr>"); 
     } 
     var item = Model.ElementAt(i); 
     <td class="project-tile"> 
      @Html.DisplayFor(modelItem => item.Title)     
     </td>   
    } 
    </tr>  
</table> 

Tak w istocie każdy trzeci element Chciałbym ostrzami wyjścia „” string Aby dodać kolejny wiersz do tabeli. Wydaje się, że wszystko działa dobrze, poza tym żądłem nie ma w źródle strony. Podczas debugowania widzę, że ta linia jest rzeczywiście wywoływana, ale nie ma wyjścia w wygenerowanej stronie. Powrót na górę

Każda pomoc? Wiele z góry dzięki ....

+0

Czy próbowałeś po prostu użyć? Nie trzeba używać Html.Raw – ysrb

+0

zrobiłem. Problemem jest to, że wtedy nie można znaleźć brzytwa wspornik do zamykania pętli for ... :( – Palkos

+0

Tak. Właśnie zauważyłem, że masz nieprawidłowy tag HTML (niezamknięte) i Razor spróbować go zatwierdzić. – ysrb

Odpowiedz

61

Powodem nie jest outputing z powodu kontekście składni brzytwa wykonywane. W swoim bloku if, cały kod działa jak gdybyś był w regularnym kontekstu i linii C#:

Html.Raw("</tr><tr>"); 

Zwraca MvcHtmlString ale nie robi nic z tego. Trzeba wprowadzić kontekst wyjściowy:

@Html.Raw("</tr><tr>"); 
+0

Masz rację. Właśnie tego próbowałem. Wygląda na to, że obejście problemu nie jest konieczne, jeśli dodasz @ przed pomocnikiem HTML. Dzięki... – Palkos

3

użyłbym obejście.

Spróbuj:

<table class="projects-grid"> 
    <tr> 
    @for(int i = 0; i< Model.Count(); i++) 
    { 
     if (i != 0 && i % 3 == 0) 
     { 
      <text> 
      @Html.Raw("</tr><tr>") 
      </text> 
     } 
     var item = Model.ElementAt(i); 
     <td class="project-tile"> 
      @Html.DisplayFor(modelItem => item.Title)     
     </td>   
    } 
    </tr>  
</table> 

Nadzieję, że to pomaga.

+0

To działa dobrze! Dzięki! – Palkos

+0

Nie ma obaw kolego :) – ysrb

+1

To działa nie z powodu zawiniętego '' ale ze względu na '@'. –

0

Html.Raw faktycznie stosowane do linii przerwy jak co zrobić w C# za pomocą/n

Dla przykładu:

<text> 
@html.raw("</tr><tr>") 
</text> 

Mam nadzieję, że to pomaga .

0

Html.Raw

znaczników HTML Okłady w instancji HtmlString tak, że jest on interpretowany jako znaczników HTML. Dla przykładu:

Controller

public actionresult Htmlraw() 
{ 
    viewbag.message = "Hey friends lets go" + "<br />" + "for chillout"; 
    return view(); 
} 

wyjście

@html.raw(viewbag.message); 
Powiązane problemy