web-dev-qa-db-fra.com

Affichage de la chaîne HTML à partir d'un modèle dans la vue Razor de MVC

J'ai un modèle déposé qui retourne une chaîne HTML avec une balise BR, mais comment afficher ce code HTML sur le navigateur? Le problème ins au lieu de mettre le saut de ligne, la balise elle-même affichant sur l'interface utilisateur

J'ai essayé de mettre le modèle dans Html.Raw (modelItem => item.Speaking), mais cela ne fonctionne jamais car il attend une chaîne à l'intérieur et ne peut pas convertir l'expression lambda en type 'chaîne' car ce n'est pas un type de délégué

Ci-dessous, le code et les commentaires de ce que j'ai essayé.

<div>
  @{          
     string strTest = "<br/>Line 1 <br/> Line 2<br>";
     @Html.Raw(strTest); //This works and display as expected
     @MvcHtmlString.Create(strTest); //This works and display as expected       

     @Html.Raw(Html.DisplayFor(modelItem => item.Speaking)); //This doesn't work, its show the <br />  on the screen     
     @MvcHtmlString.Create(Html.DisplayFor(modelItem => item.Speaking).ToString());   //This doent work, its show the <br />  on the screen  
     @Html.Raw(modelItem => item.Speaking) //This throw error Cannot convert lambda expression to type string                                     
    }

 </div>

Appréciez toute aide ou suggestion. Merci d'avance!

8
Sreejith

Essaye ça :

@(new HtmlString(stringWithMarkup))

et vous pouvez aussi créer un assistant HTML !:

@helper RawText(string s) {
    @(new HtmlString(s))
}
12
Oualid KTATA

Dans MVC4  

Au lieu d'utiliser @Html.Raw(modelItem => item.Speaking)

Vous pouvez utiliser @Html.Raw(@Model.Speaking.ToString())

Cela fonctionne pour moi et j'espère que cela aidera quelqu'un d'autre aussi

5
Dashrath

Vous pouvez simplement omettre les deux DisplayFor et modelItem => , donc:

@Html.Raw(item.Speaking)
0
MGOwen