web-dev-qa-db-fra.com

Razor - HTML.RAW ne génère pas de texte

J'ai essayé toutes les solutions proposées à d'autres questions similaires, mais aucune d'entre elles ne semble fonctionner… .. Essentiellement, j'essaie d'afficher un tableau rempli de données provenant d'une collection de modèles. Ce n'est pas un problème en soi, mais je voudrais forcer rasoir à le générer toujours en 3 colonnes (peu importe le nombre d'éléments que nous avons). Mon idée originale était de le faire de cette façon:

 <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>

Ainsi, chaque troisième élément voudrait que la chaîne "" soit générée par une chaîne afin d’ajouter une autre ligne à la table. Tout semble bien fonctionner sauf que cette piqûre n'est pas présente dans le code source de la page. En debug je peux voir que cette ligne

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

Est effectivement appelé, mais aucune sortie dans la page générée n'est présente. 

Toute aide? Merci beaucoup d'avance ....

31
Palkos

La raison pour laquelle il ne sort pas est dû au contexte de la syntaxe de rasoir en cours d'exécution. Dans votre bloc if, tout le code s'exécute comme si vous vous trouviez dans un contexte C # normal et que la ligne:

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

Retourne une MvcHtmlString mais vous ne faites rien avec elle. Vous devez entrer un contexte de sortie:

@Html.Raw("</tr><tr>");
65
Simon Belanger

Je voudrais utiliser un travail autour.

Essayer:

<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>

J'espère que ça aide.

3
ysrb

Enfermer Html.Raw avec @ (et) a résolu le problème pour moi. Même s'il y avait un @ {et} extérieur, il avait toujours besoin de @ (et) autour de chaque instruction Html.Raw.

0
Isaac Levy

Html.Raw effectivement utilisé pour les sauts de ligne, comme ce que vous faites dans c # avec/n

Par exemple:

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

J'espère que ça aide.

0
saurav singh

Html.Raw

Encapsule le balisage HTML dans une instance HtmlString de sorte qu'il soit interprété comme un balisage HTML .

Manette

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

sortie

@html.raw(viewbag.message);
0
Rizwan Younas