ASP.NET MVC Razor条件渲染元素

use*_*539 11 asp.net-mvc razor

如何在Razor 2中有条件地呈现HTML元素?

例如,假设我有标签

    <div class="someclass">
         <p>@somevalue</p>
    </div>
Run Code Online (Sandbox Code Playgroud)

如果@somevalue的值等于1,我想要抑制<-div->标签的渲染.在Razor中有一种简单的方法可以做到这一点,就像我可能"隐藏"<-div->标签一样在浏览器中使用Knockout.js,我可能会:

    <div class="someclass" data-bind="showWhenTrue: someValue != 1">
         <p data-bind="text: someValue"></p>
    </div>
Run Code Online (Sandbox Code Playgroud)

目前,我所拥有的最佳Razor替代方案是:

      @if (someValue != 1) {
         <div class="someclass">
               <p>@somevalue</p>
         </div>
      }
Run Code Online (Sandbox Code Playgroud)

Eri*_*sch 15

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

您实际使用的剃刀代码会从呈现的HTML中删除代码,因此这是一个非常不同的东西.

要回答您的问题,我们需要知道您要实现的目标.如果你只是想隐藏显示,你可以简单地做这样的事情:

<div class="someclass" style="display: @{ somevalue == 1 ? @:"hidden" : @:"block" };">
     <p>@somevalue</p>
</div>
Run Code Online (Sandbox Code Playgroud)

你也可以用一个类来做:

<div class="someclass @{ somevalue == 1 ? @:"HideMe" : @:"ShowMe" }">
     <p>@somevalue</p>
</div>
Run Code Online (Sandbox Code Playgroud)

如果你想从输出中删除代码,那么你可以做你已经做过的事情.我很确定你发现的内容如此令人反感......但如果你想要其他选择,你可以创建一个Html帮手,你可以使用剃刀助手,你可以使用Display或EditorTemplate ....

这个名单实际上很长,我只是在表面上......

  • 令人讨厌的是@(...)有时会搞砸整个文档的自动格式化以及标记内容的其余部分的智能感知.knockoutjs有data-bind ="if:someBoolean",angular有*ngIf ="someBoolean".我希望剃刀能够沿着这些线条内置一些东西来帮助我们保持标记整洁 (3认同)