ASP.NET MVC Razor视图中的Html.Raw()
@{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++) } 此代码部分不会编译,出现以下错误
 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 
我必须做什么? 谢谢。
  Html.Raw()返回IHtmlString ,而不是普通的string 。 所以,你不能把它们写在: operator的两边。 删除.ToString()调用 
 @{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++) } 
 顺便说一句,返回IHtmlString是MVC识别html内容的方式,不会对其进行编码。 即使它没有引起编译错误,调用ToString()也会破坏Html.Raw() 
接受的答案是正确的,但我更喜欢:
 @{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++) } 
尽pipe我迟到了,但我希望这能激励一个人。
 你不应该调用.ToString() 。 
 正如错误信息明确指出的那样,您正在编写一个条件,其中一半是IHtmlString ,另一半是string。 
 这是没有道理的,因为编译器不知道整个expression式应该是什么types。 
  从来没有理由调用Html.Raw(...).ToString() 。 
  Html.Raw返回一个包装原始string的HtmlString实例。 
  Razor页面输出知道不要转义HtmlString实例。 
 但是,调用HtmlString.ToString()只是返回原始string值; 它没有完成任何事情。 
- MVC控制器:从HTTP正文获取JSON对象?
- 如何在ASP.NET MVC 3中创build自己的脚手架模板?
- ASP.NET:在应用程序的预启动初始化阶段不能调用此方法
- 使用Razor在MVC 4中的DropDownList
- 如何将HttpRequestBase转换为HttpRequest对象?
- 我需要在Web服务器上安装MVC 3/4才能运行mvc应用程序
- 在Windows Update之后,System.Web.Mvc无法正常工作
- VS 2012上没有ASP.NET MVC 5 Web应用程序模板?
- 自MS14-059以来,System.Web.MVC不会复制到bin文件夹中。 如何防止由于Windows更新而创build缺lessDLL的生成?