在标签中我想有条件地输出样式属性,例如:<li style="@styleVar" >...</li>
当styleVar为null时,它不应该由razor编写(只是Razor 2中假定的标准功能),但由于某些奇怪的原因,它输出为<li style="">...</li>
,而我期望<li>...</li>
。
这是部分视图。在正常视图中,它正在工作。 这部分视图中的错误是什么?
有人有同样的经历吗?
答案 0 :(得分:8)
这似乎不适用于部分视图和自定义html属性,例如data-test =“@ test”。这不会被省略,而是仍然放入data-test =“”。所以MVC团队必须尽快解决这个问题。
答案 1 :(得分:5)
如果styleVar
等于null
(而不是string.Empty
),mvc4会自动执行此操作。
条件属性渲染
如果你的属性可能为null,那么在过去你需要进行空检查以避免写出空属性,如下所示:
<div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div>
现在Razor能够自动处理,所以你可以写出属性。如果为null,则不写入该属性:
<div class="@myClass">Content</div>
因此,如果@myClass为null,则输出就是:
<div>Content</div>
答案 2 :(得分:1)
在代码中看不到任何错误:您“硬编码”标记并仅改变样式值。 要实现您要执行的操作,您需要与此类似的代码:
@if(!string.IsNullOrEmpty(styleVar))
{
<li style="@styleVar" >...</li>
}
答案 3 :(得分:0)
另一个可能的原因是HTML标记内的Razor注释。
// This renders <div>Hello world</div>
<div class="@null">Hello world</div>
// Renders <div class="">Hello world</div>
<div @**@ class="@null">Hello world</div>
当我为了测试目的而注释掉一个属性时,我遇到了这个问题,突然间我的条件属性被打破了。
答案 4 :(得分:0)
我刚遇到一个情况,即属性名称和等号之间的空格打破了布尔条件渲染:
所以
<input type="checkbox" name="fieldname" id ="fieldname" checked="@Model.MyBool" />
使用checked="True"
呈现,而
<input type="checkbox" name="fieldname" id="fieldname" checked="@Model.MyBool" />
使用checked="checked"
条件渲染看起来相当脆弱。
这不完全是OP问题细节的答案,但对于那些寻求“Razor条件属性不起作用”帮助的人来说,这绝对是可能的。
答案 5 :(得分:-1)
在styleVar == null
时,您会在部分和普通视图中获得<li style="">...
(至少使用mvc3)。
我猜你必须使用条件运算符:
<li @(styleVar == null ? "" : "style=\"" + styleVar + "\"")>...</li>