@{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
我必须做什么?感谢。
答案 0 :(得分:72)
Html.Raw()
会返回IHtmlString
,而不是普通的string
。因此,您不能在:
运算符的相对侧写入它们。删除.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()
答案 1 :(得分:41)
接受的答案是正确的,但我更喜欢:
@{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++)
}
我希望这会激励某人,即使我迟到了。
答案 2 :(得分:10)
您不应该致电.ToString()
。
正如错误信息明确指出的那样,你正在编写一个条件,其中一半是IHtmlString
而另一半是字符串。
这没有意义,因为编译器不知道整个表达式应该是什么类型。
从不有理由致电Html.Raw(...).ToString()
Html.Raw
返回包装原始字符串的HtmlString
实例
Razor页面输出知道不要转义HtmlString
个实例。
但是,调用HtmlString.ToString()
只会再次返回原来的string
值;它没有完成任何事情。