【问题标题】:ASP.NET MVC Razor syntaxASP.NET MVC 剃刀语法
【发布时间】:2011-04-12 22:17:18
【问题描述】:

这是我想用 Razor 表达的:

<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>

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

【问题讨论】:

  • 每个属性的数据类型是什么?
  • 当你说它“不可解析”时你得到了什么错误?
  • @Larsenal:所有属性都是字符串。我收到一个奇怪的错误,说没有用于关闭
    。如果我删除这些行就可以了。

标签: c# .net asp.net asp.net-mvc razor


【解决方案1】:

你写的:

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

实际上在 Razor 中有效。我的猜测是,您在某些条件或迭代语句(ifforeach 等)中拥有所有这些。在这种情况下,您可以将整个内容包裹在&lt;text&gt;

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

您可以使用&lt;p&gt;&lt;div&gt; 等有效的HTML 元素来代替&lt;text&gt;。这是因为默认情况下,在{ 之后,解析器处于“代码”模式,需要一个标记标签才能切换到“标记”模式。

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

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

【讨论】:

  • @Idsa 任何标签都可以。 &lt;text&gt; 是一个不会被渲染到输出的魔术标签。
  • 但是根据我问题中的代码, 标签并没有将 razor 切换到标记模式。
  • @Idsa 我添加了应该回答您问题的说明
猜你喜欢
  • 1970-01-01
  • 2011-06-09
  • 2011-12-05
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 2012-05-16
相关资源
最近更新 更多