@{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++) }
Questa parte del codice non viene compilata, con il seguente errore
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
Cosa devo fare? Grazie.
Html.Raw()
restituisce IHtmlString
, non la string
ordinaria. Quindi, non puoi scriverli in lati opposti di :
operatore. Rimuovi quella .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++) }
A proposito, restituire IHtmlString
è il modo in cui MVC riconosce il contenuto html e non lo codifica. Anche se non ha causato errori del compilatore, chiamare ToString()
potrebbe distruggere il significato di Html.Raw()
La risposta accettata è corretta, ma preferisco:
@{int count = 0;} @foreach (var item in Model.Resources) { @Html.Raw(count <= 3 ? "" : "") // some code @Html.Raw(count <= 3 ? "" : "") @(count++) }
Spero che questo ispiri qualcuno, anche se sono in ritardo per la festa.
Non dovresti chiamare .ToString()
.
Come afferma chiaramente il messaggio di errore, stai scrivendo un condizionale in cui una metà è una IHtmlString
e l’altra metà è una stringa.
Questo non ha senso, dal momento che il compilatore non sa di che tipo dovrebbe essere l’intera espressione.
Non c’è mai un motivo per chiamare Html.Raw(...).ToString()
.
Html.Raw
restituisce un’istanza HtmlString
che avvolge la stringa originale.
L’output della pagina Razor sa di non sfuggire HtmlString
istanze di HtmlString
.
Tuttavia, la chiamata a HtmlString.ToString()
restituisce di nuovo il valore di string
originale; non realizza nulla