@{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++)
}
This code part does not compile, with the following 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
What I must I do? Thanks.
Html.Raw()
returnsIHtmlString
, not the ordinarystring
. So, you cannot write them in opposite sides of:
operator. Remove that.ToString()
callingBy the way, returning
IHtmlString
is the way MVC recognizes html content and does not encode it. Even if it hasn't caused compiler errors, callingToString()
would destroy meaning ofHtml.Raw()
The accepted answer is correct, but I prefer:
I hope this inspires someone, even though I'm late to the party.
You shouldn't be calling
.ToString()
.As the error message clearly states, you're writing a conditional in which one half is an
IHtmlString
and the other half is a string.That doesn't make sense, since the compiler doesn't know what type the entire expression should be.
There is never a reason to call
Html.Raw(...).ToString()
.Html.Raw
returns anHtmlString
instance that wraps the original string.The Razor page output knows not to escape
HtmlString
instances.However, calling
HtmlString.ToString()
just returns the originalstring
value again; it doesn't accomplish anything.