Razor模板中三元运算符(?:)使用报错CS0173的解决方法咨询
Razor模板中三元运算符(?:)使用报错CS0173的解决方法咨询
嘿,我完全懂你现在卡在哪了!这个CS0173错误的根源其实很简单——你用的三元运算符两边的数据类型不兼容。
你看这段代码:
@(hasSubMenuItems ? "dropdown" : @Html.Raw(" "))
冒号左边是普通的字符串("dropdown"),但右边是Html.Raw()返回的IHtmlString类型,C#编译器没法自动在这两种类型之间做隐式转换,所以就抛出了这个错误。
解决方法其实超简单:
你根本不需要用Html.Raw(" ")来占位,当条件不满足的时候,直接返回空字符串就好,这样三元运算符两边的类型就都是string了,完美匹配。
把你原来的<li>标签里的class部分改成这样:
<li class="nav-item @(hasSubMenuItems ? "dropdown" : "") @(hasMegaMenu ? "has-megamenu" : "")" @Html.InlineEditingAttributes(Model.ProviderName, Model.ContentType.FullName, (Guid)item.Fields.Id)>
额外的小优化建议:
你判断hasMegaMenu的代码里,subItem.MegaMenuSelection.ToHtmlString() == @Html.Raw("Yes")可以简化一下,Html.Raw("Yes")是没必要的,直接和字符串"Yes"对比就行:
bool hasMegaMenu = hasSubMenuItems && subMenuItems.Any(subItem => subItem.MegaMenuSelection.ToHtmlString() == "Yes");
这样改完之后,不仅能解决那个类型不匹配的错误,代码逻辑也更清晰,而且空字符串在HTML的class属性里不会有任何问题,浏览器会自动忽略多余的空格,完全不影响样式渲染~
备注:内容来源于stack exchange,提问作者Aaron Jackson
相关产品推荐
相关产品推荐

