47 votes

Html.Raw() dans ASP.NET MVC Vue rasoir

@{int count = 0;}
@foreach (var item in Model.Resources)
{
    @(count <= 3 ? Html.Raw("<div class=\"resource-row\">").ToString() : Html.Raw("")) 
    // some code
    @(count <= 3 ? Html.Raw("</div>").ToString() : Html.Raw("")) 
    @(count++)

}

Cette partie de code ne compile pas, avec l'erreur suivante

Error   18  Type of conditional expression cannot be determined because there is no implicit conversion between 'string' and 'System.Web.IHtmlString'   d:\Projects\IRC2011_HG\IRC2011\Views\Home\_AllResources.cshtml  21  24  IRC2011

Que dois-je faire ?

0 votes

ToString affichera la chaîne HTML dans la page. Like "<div></div>".ToString() will show <div></div> instead of adding div element.

77voto

archil Points 21369

Html.Raw() renvoie à IHtmlString pas l'ordinaire string . Donc, vous ne pouvez pas les écrire dans les côtés opposés de : opérateur. Retirez ce .ToString() en appelant

@{int count = 0;}
@foreach (var item in Model.Resources)
{
    @(count <= 3 ? Html.Raw("<div class=\"resource-row\">"): Html.Raw("")) 
    // some code
    @(count <= 3 ? Html.Raw("</div>") : Html.Raw("")) 
    @(count++)

}

Au fait, le retour IHtmlString est la façon dont MVC reconnaît le contenu html et ne le code pas. Même si cela n'a pas causé d'erreurs de compilation, appeler ToString() détruirait le sens de Html.Raw()

44voto

rfmodulator Points 1548

La réponse acceptée est correcte, mais je préfère :

@{int count = 0;} 
@foreach (var item in Model.Resources) 
{ 
    @Html.Raw(count <= 3 ? "<div class=\"resource-row\">" : "")  
    // some code 
    @Html.Raw(count <= 3 ? "</div>" : "")  
    @(count++)
} 

J'espère que cela inspirera quelqu'un, même si je suis en retard à la fête.

0 votes

Le seul changement que je ferais est de déplacer les chaînes de caractères dans des constantes et d'y accéder par un nom significatif.

10voto

SLaks Points 391154

Vous ne devriez pas appeler .ToString() .

Comme le message d'erreur l'indique clairement, vous écrivez une condition dans laquelle une moitié est un IHtmlString et l'autre moitié est une chaîne.
Cela n'a pas de sens, puisque le compilateur ne sait pas quel type doit être l'expression entière.


Il y a jamais une raison d'appeler Html.Raw(...).ToString() .
Html.Raw renvoie un HtmlString qui englobe la chaîne originale.
La sortie de la page Razor sait qu'elle ne doit pas s'échapper. HtmlString instances.

Cependant, appeler HtmlString.ToString() renvoie juste l'original string valeur à nouveau ; cela ne sert à rien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X