Html.Raw () in ASP.NET MVC Razor view

@{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