Asp.net mvc 4 条件属性不工作
在标记中,我希望有条件地输出style属性,例如:Asp.net mvc 4 条件属性不工作,asp.net-mvc-4,razor-2,Asp.net Mvc 4,Razor 2,在标记中,我希望有条件地输出style属性,例如:… 当styleVar为null时,它不应该由razor编写(只是razor 2中假定的标准功能),但出于某种奇怪的原因,它被输出为…,而我希望… 这是部分观点。在正常情况下,它正在工作。 这是局部视图中的错误吗 有人有同样的经历吗?在代码中看不到任何错误:您“硬编码”标记,只更改样式值。 要实现您想要做的事情,您需要类似以下代码: @if(!string.IsNullOrEmpty(styleVar)) { <li style="@s
…
当styleVar为null时,它不应该由razor编写(只是razor 2中假定的标准功能),但出于某种奇怪的原因,它被输出为… ,而我希望…
这是部分观点。在正常情况下,它正在工作。
这是局部视图中的错误吗
有人有同样的经历吗?在代码中看不到任何错误:您“硬编码”标记,只更改样式值。
要实现您想要做的事情,您需要类似以下代码:
@if(!string.IsNullOrEmpty(styleVar))
{
<li style="@styleVar" >...</li>
}
@if(!string.IsNullOrEmpty(styleVar))
{
}
当styleVar==null
时,您将在局部视图和正常视图中获得…
(至少使用mvc3)
我想您必须使用条件运算符:
<li @(styleVar == null ? "" : "style=\"" + styleVar + "\"")>...</li>
如果styleVar
等于null
(不是string.Empty
),mvc4将自动执行此操作
条件属性呈现
如果您有一个可能为null的属性,那么过去您需要执行null检查以避免写出空属性,如下所示:
<div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div>
内容
现在Razor能够自动处理这个问题,所以您只需写出属性即可。如果为null,则不写入属性:
<div class="@myClass">Content</div>
内容
因此,如果@myClass为null,则输出如下:
<div>Content</div>
内容
这在局部视图和自定义html属性(如data test=“@test”)中似乎不起作用。这并没有被忽略,相反,它仍然将数据放在test=“”中。因此MVC团队必须尽快解决这个问题。另一个可能的原因是HTML标记中有一个尖锐的注释
// This renders <div>Hello world</div>
<div class="@null">Hello world</div>
// Renders <div class="">Hello world</div>
<div @**@ class="@null">Hello world</div>
//这将呈现Hello world
你好,世界
//世界你好
你好,世界
当我出于测试目的注释掉一个属性时,我遇到了这种情况,我的条件属性突然被破坏。我刚刚遇到一种情况,属性名和等号之间的空格破坏了布尔条件渲染:
所以
使用checked=“True”
呈现,而
使用checked=“checked”
条件渲染看起来相当脆弱
这并不完全是对OP问题细节的回答,但对于那些正在寻求“Razor条件属性不起作用”帮助的人来说,这绝对是一种可能性。我希望,… 作为输出。编辑我的问题以澄清这一点。根据您的更改。若字符串的计算结果为NULL,它将删除空属性,但若字符串的计算结果为空字符串,它将呈现空属性。这是Razor v2indeed的一个算法,适用于顶级视图,但似乎不适用于部分视图。假设您在这里使用MVC3,如果您能够升级到MVC4,那么您可以免费获得此行为:我使用MVC4。请注意,我说过我使用MVC4中包含的Razor 2。Razor似乎对这里的空格有点挑剔,我删除了属性名称和“=”之间的空白,它就起了作用。正如我在问题中所说,我正在使用Razor 2,它在MVC4中使用。所以这个答案不适用于Html.Helpers吗?如果属性的值为null,属性将不会呈现我很确定如果数据属性未删除是故意的“数据-”不能使用条件属性,您可以在源代码中找到此引用//首先,确定这是否是“数据-”属性(因为这些属性不能使用条件属性)LocationTagged name=nameSymbols.GetContent(Span.Start);bool attributeCanBeConditional=!name.Value.StartsWith(“数据-”,StringComparison.OrdinalIgnoreCase);