代码之家  ›  专栏  ›  技术社区  ›  SiberianGuy

ASP.NET MVC Razor语法

  •  4
  • SiberianGuy  · 技术社区  · 15 年前

    以下是我想用剃刀表达的意思:

    <b>@parameterMapping.Title</b> (Category: @parameterMapping.Category.Title, Regexp: @parameterMapping.Regexp)
    

    但要使其可解析,我必须这样写:

    <b>@parameterMapping.Title</b> <text>(Category: </text> @parameterMapping.Category.Title <text>, Regexp:</text> @parameterMapping.Regexp <text>)</text>
    

    有更好的方法来解决这个问题吗?

    1 回复  |  直到 15 年前
        1
  •  13
  •   marcind    15 年前

    你写下的:

    <b>@parameterMapping.Title</b>
    (Category: @parameterMapping.Category.Title, Regexp: @parameterMapping.Regexp)
    

    在剃刀上是有效的。我的猜测是,所有这些都存在于一些条件语句或迭代语句中( if foreach 等)。在这种情况下,你可以把整个东西包起来 <text> :

    @if(Foo) {
      <text><b>@parameterMapping.Title</b>
      (Category: @parameterMapping.Category.Title, Regexp: @parameterMapping.Regexp)</text>
    }
    

    而不是 <文本> 您可以使用一个有效的HTML元素,比如 <p> <div> 。这是因为默认情况下 { 解析器处于“代码”模式,需要一个标记标记来切换到“标记”模式。

    请注意,Razor执行标记匹配,这就是为什么您需要 如果 如果希望将标记中的所有语句都视为标记,则该语句包含在标记中。否则,不在标记内的所有内容都将被视为代码:

    @if(Foo) {
      // Treate as code
      <text>
        Markup
        <div>More markup</div>
        @EscapeIntoCode
      </text>
      // Treate as code again
    }