5

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

这是片面的看法。在正常视图中它正在工作。那么这是部分视图中的错误吗?

有人有同样的经历吗?

4

6 回答 6

9

这似乎不适用于部分视图和自定义 html 属性,例如 data-test="@test"。这没有省略,而是仍然放在 data-test="" 中。所以 MVC 团队必须尽快解决这个问题。

于 2013-07-25T01:03:19.740 回答
6

如果styleVar等于null(不是string.Empty)mvc4 将自动执行此操作。

条件属性渲染

如果您有一个可能为空的属性,过去您需要进行空检查以避免写出空属性,如下所示:

<div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div>

现在 Razor 能够自动处理这个问题,所以你可以写出属性。如果为 null,则不写入该属性:

<div class="@myClass">Content</div>

所以如果@myClass 为空,输出就是这样:

<div>Content</div>
于 2013-01-19T15:49:20.403 回答
1

在您的代码中看不到任何错误:您“硬编码”标记并且仅改变样式值。为了实现你想要做的事情,你需要类似于这样的代码:

@if(!string.IsNullOrEmpty(styleVar))
{
  <li style="@styleVar" >...</li>
}
于 2012-11-07T10:27:58.823 回答
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>

当我出于测试目的注释掉一个属性时遇到了这个问题,突然间我的条件属性被破坏了。

于 2014-03-06T10:16:45.167 回答
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 条件属性不起作用”帮助的人来说,这绝对是一种可能性

于 2017-11-08T20:39:25.557 回答
-1

styleVar == null您将<li style="">...(至少使用 mvc3)获得部分和正常视图时。

我猜你必须使用条件运算符:

<li @(styleVar == null ? "" : "style=\"" + styleVar + "\"")>...</li>
于 2012-11-07T10:44:23.790 回答