剃刀查看引擎自动应用报价?

Dan*_*anH 27 asp.net razor

我现在已经习惯了剃刀,但我不明白为什么以下语法是正确的?

<li @(active ? "class=active" : "")>
   @Html.ActionLink(item.Text, item.TargetAction, Model.Controller)
</li>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我有条件地应用了一个类(我用这种方式编写它,因此如果bool active == false则不生成类标记).

我无法理解的是,为什么这会产生正确的报价给出:

<li class="active"><a href="/">Home</a></li>
   <a href="/">Home</a>
</li>
Run Code Online (Sandbox Code Playgroud)

不知何故,它是神奇地整理引用,但我在剃刀的文章中找不到任何参考,以表明这是预期的,所以我想知道它是否依赖于破碎的行为.如果我在单词'active'周围的字符串中添加单引号或双引号,就像你想要的那样,如果你想要html,我最终得到:

<li class="'active'">
    <a href="/">Home</a>
</li>
Run Code Online (Sandbox Code Playgroud)

要么

<li class=&quot;active&quot;>
    <a href="/">Home</a>
</li>
Run Code Online (Sandbox Code Playgroud)

为什么它以这种方式工作,并且我的代码是正确的(而不是简单的功能)?

And*_*and 16

刚刚碰到这个想法会回答 - SLaks看起来是正确的Html.Raw,但OP也是正确的,因为第二种方法看起来不起作用 - "s得到编码.

我的解决方案是:

<li@(active ? Html.Raw(" class=\"active\"") : null)>
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 15

Razor自动HTML转义所有代码输出.
你可以写一下来防止这种情况@Html.Raw(...)

或者,您可以将引号放在文字文本中:

<li class="@(active ? "active" : "")>
Run Code Online (Sandbox Code Playgroud)

您的示例有效,因为您实际上没有任何引号.
生成的HTML源代码读取<li class=active>.

  • 这就是事情,它实际上并没有像你说的那样阅读.它会自动将引号括在"活动"周围,我已在两个不同的浏览器中检查了查看源.这是我的问题的核心.在任何文档中它都说这是预期的行为? (2认同)