Html.Raw () en ASP.NET MVC Razor vista

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

Esta parte del código no se comstack, con el siguiente error

 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 

¿Qué debo hacer? Gracias.

Html.Raw() devuelve IHtmlString , no la string ordinaria. Por lo tanto, no puede escribirlos en lados opuestos de : operador. Eliminar esa .ToString()

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

Por cierto, devolver IHtmlString es la forma en que MVC reconoce el contenido html y no lo codifica. Incluso si no ha causado errores de comstackción, llamar a ToString() destruiría el significado de Html.Raw()

La respuesta aceptada es correcta, pero prefiero:

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

Espero que esto inspire a alguien, a pesar de que llego tarde a la fiesta.

No deberías estar llamando a .ToString() .

Como el mensaje de error indica claramente, está escribiendo un condicional en el que la mitad es un IHtmlString y la otra mitad es una cadena.
Eso no tiene sentido, ya que el comstackdor no sabe de qué tipo debe ser toda la expresión.


Nunca hay una razón para llamar a Html.Raw(...).ToString() .
Html.Raw devuelve una instancia de HtmlString que envuelve la cadena original.
La salida de la página Razor sabe que no debe escapar de las instancias de HtmlString .

Sin embargo, llamar a HtmlString.ToString() simplemente devuelve el valor de string original nuevamente; no logra nada