在标签中,我想有条件地输出样式属性,例如:<li style="@styleVar" >...</li>
当 styleVar 为 null 时,它不应该由 razor 编写(只是 Razor 2 中假定的标准功能),但由于某些奇怪的原因,它输出为<li style="">...</li>
,而我期望<li>...</li>
.
这是片面的看法。在正常视图中它正在工作。那么这是部分视图中的错误吗?
有人有同样的经历吗?
在标签中,我想有条件地输出样式属性,例如:<li style="@styleVar" >...</li>
当 styleVar 为 null 时,它不应该由 razor 编写(只是 Razor 2 中假定的标准功能),但由于某些奇怪的原因,它输出为<li style="">...</li>
,而我期望<li>...</li>
.
这是片面的看法。在正常视图中它正在工作。那么这是部分视图中的错误吗?
有人有同样的经历吗?
这似乎不适用于部分视图和自定义 html 属性,例如 data-test="@test"。这没有省略,而是仍然放在 data-test="" 中。所以 MVC 团队必须尽快解决这个问题。
如果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>
在您的代码中看不到任何错误:您“硬编码”标记并且仅改变样式值。为了实现你想要做的事情,你需要类似于这样的代码:
@if(!string.IsNullOrEmpty(styleVar))
{
<li style="@styleVar" >...</li>
}
另一个可能的原因是 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>
当我出于测试目的注释掉一个属性时遇到了这个问题,突然间我的条件属性被破坏了。
我刚刚遇到一种情况,属性名称和等号之间的空格破坏了布尔条件渲染:
所以
<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 条件属性不起作用”帮助的人来说,这绝对是一种可能性
当styleVar == null
您将<li style="">...
(至少使用 mvc3)获得部分和正常视图时。
我猜你必须使用条件运算符:
<li @(styleVar == null ? "" : "style=\"" + styleVar + "\"")>...</li>