Razor条件属性不起作用

时间:2012-11-07 10:19:26

标签: asp.net-mvc-4 razor-2

在标签中我想有条件地输出样式属性,例如:<li style="@styleVar" >...</li> 当styleVar为null时,它不应该由razor编写(只是Razor 2中假定的标准功能),但由于某些奇怪的原因,它输出为<li style="">...</li>,而我期望<li>...</li>

这是部分视图。在正常视图中,它正在工作。 这部分视图中的错误是什么?

有人有同样的经历吗?

6 个答案:

答案 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>