Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 条件属性不工作_Asp.net Mvc 4_Razor 2 - Fatal编程技术网

Asp.net mvc 4 条件属性不工作

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

在标记中,我希望有条件地输出style属性,例如:
  • 当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);