Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/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 ASP.NET MVC Razor条件呈现元素_Asp.net Mvc_Razor - Fatal编程技术网

Asp.net mvc ASP.NET MVC Razor条件呈现元素

Asp.net mvc ASP.NET MVC Razor条件呈现元素,asp.net-mvc,razor,Asp.net Mvc,Razor,如何在Razor2中有条件地呈现HTML元素 例如,假设我有标签 <div class="someclass"> <p>@somevalue</p> </div> @一些价值 如果@somevalue的值等于1,我想禁止显示标记。在Razor中有没有一种简单的方法可以做到这一点,就像我在浏览器中使用Knockout.js“隐藏”标记一样,我可能: <div class="someclass" d

如何在Razor2中有条件地呈现HTML元素

例如,假设我有标签

    <div class="someclass">
         <p>@somevalue</p>
    </div>

@一些价值

如果@somevalue的值等于1,我想禁止显示标记。在Razor中有没有一种简单的方法可以做到这一点,就像我在浏览器中使用Knockout.js“隐藏”标记一样,我可能:

    <div class="someclass" data-bind="showWhenTrue: someValue != 1">
         <p data-bind="text: someValue"></p>
    </div>

目前,我拥有的最佳剃须刀选择是:

      @if (someValue != 1) {
         <div class="someclass">
               <p>@somevalue</p>
         </div>
      }
@if(someValue!=1){
@一些价值

}
有很多方法可以做到这一点。首先,应该注意,敲除代码实际上并没有从输出中删除html,它只是将其显示设置为隐藏

您拥有的razor代码实际上从呈现的HTML中删除了代码,因此这是一件非常不同的事情

要回答你的问题,我们需要知道你想要实现什么。如果只想隐藏显示,只需执行以下操作:

<div class="someclass" style="display: @{ somevalue == 1 ? @:"none" : @:"block" };">
     <p>@somevalue</p>
</div>

@一些价值

您也可以通过一个类来完成:

<div class="someclass @{ somevalue == 1 ? @:"HideMe" : @:"ShowMe" }">
     <p>@somevalue</p>
</div>

@一些价值

如果您想从输出中删除代码,那么只需执行您已经完成的操作即可。。我不知道你觉得有什么不好的。。。但是如果你想要其他的选择,你可以创建一个Html助手,你可以使用razor助手,你可以使用Display或EditorTemplate

这个列表实际上很长,我只是触及了表面…

一个优雅的(可重复使用的)解决方案是为Html编写一个扩展方法来进行文本的有条件呈现(有点像Excel中的IF())

然后,您可以在代码中使用它,如下所示:

   <div class="someclass" style="display: @Html.ConditionalRender(somevalue == 1, "none","block")">
        <p>@somevalue</p>
   </div>

@一些价值


我是这样做的:@(string.IsNullOrEmpty(somevalue)?“hideme”:“”)令人反感的是,@(…)有时会破坏整个文档的自动格式化,而intellisense则会破坏标记内容的其余部分。knockoutjs具有数据绑定=“if:someBoolean”,angular具有*ngIf=“someBoolean”。我本以为razor会在这些方面内置一些东西来帮助我们保持标记整洁。“hidden”不是CSS属性“display”的有效值。我在样式属性中使用@:语法时遇到了问题。我的解决方案是添加一个razor字符串变量@{var displayContent=ViewBag.showCondition?“block”:“hide”}并呈现html,内容

   <div class="someclass" style="display: @Html.ConditionalRender(somevalue == 1, "none","block")">
        <p>@somevalue</p>
   </div>